![lecture4符串元胞数组结构数组_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-11/14/054ad36e-80d1-4435-9189-999e2937725c/054ad36e-80d1-4435-9189-999e2937725c1.gif)
![lecture4符串元胞数组结构数组_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-11/14/054ad36e-80d1-4435-9189-999e2937725c/054ad36e-80d1-4435-9189-999e2937725c2.gif)
![lecture4符串元胞数组结构数组_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-11/14/054ad36e-80d1-4435-9189-999e2937725c/054ad36e-80d1-4435-9189-999e2937725c3.gif)
![lecture4符串元胞数组结构数组_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-11/14/054ad36e-80d1-4435-9189-999e2937725c/054ad36e-80d1-4435-9189-999e2937725c4.gif)
![lecture4符串元胞数组结构数组_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-11/14/054ad36e-80d1-4435-9189-999e2937725c/054ad36e-80d1-4435-9189-999e2937725c5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2.5 字符串2.5.1 字符串的定义 (可通过help strings了解本小节内容)另一种常用的变量类型为字符串(字符型数组)。matlab中的字符串常量是由单引号括起来的。例如:stra=guowang mustrb=hebei university of technology以单引号括起来的字符串实际上是一个行向量(字符型数组)。其每个元素是一个字符,在内存中实际存储的是其ascii码值,元素的标识方法和数值向量相同。例如:stra(1:7) , stra(9:end), stra works in strb . 注:stra; strb 出错,大家想一下这是为什么?2.5.2 常用的
2、字符串函数在strfun函数库中提供了一系列关于字符串的函数,可以通过help strfun命令查看有关信息。1. 获取字符串的基本信息disp(x) 或display(x) 显示变量x的内容class(x) 以字符串的形式返回变量x的类型名例如:若stra是一个字符串,则class(stra)的值为charischar(x) 如果x是一个字符串,则返回1,否则返回0length(x) 若x为字符串,返回x的长度isletter(x) 逐个检查x的每个元素是否为字母,如果是则返回1,否则返回0 ,最后返回一个和x同样大小的逻辑数组。 isspace(x) 逐个检查x的每个元素是否为空格,如果是
3、则返回1,否则返回0 ,最后返回一个和x同样大小的逻辑数组。 例如: 在命令窗口中输入以下命令,观察执行结果stra=guowang mudisp(stra), class(stra), ischar(stra), length(stra)isletter(stra)ispace(stra)2. 字符串的基本操作-连接、查找和替换strcat(s1,s2,sn) 连接字符串s1,s2,sn,得到一个新的字符串strvcat(t1,t2,tn) 垂直连接字符串t1,t2,tn,得到一个字符串矩阵(多行字符串)str2mat(t1,t2,tn) 和strvcat(t1,t2,tn) 基本一样str
4、match(s1,s2) 逐行搜索字符串矩阵s2 ,给出以s1 开头的那些行的行号findstr(s1,s2) 查找s1在s2 中出现的位置(如果s1短),或者s2在s1 中出现的位置(如果s2短)。strfind (s1,s2) 在s1中查找s2出现的位置。strrep(s1,s2,s3) 把字符串s1的所有出现s2的地方替换为s3strtok(s) 查找字符串s的第一个间隔符(空格符、制表符、回车符)前的内容blanks(n) 生成含有n个空格的字符串deblank(s) 返回删除字符串s尾部空格得到的字符串例 在命令窗口中输入以下语句,观察并分析执行结果stra= i love matl
5、ab.; strb= he loves matlab.;strc= i love math.;str=stra blanks(4) strb blanks(4) strc blanks(4)str2=deblank(str)s1=strcat(stra,strb,strc)s2=strvcat(stra,strb,strc)strmatch(i, s2)p=findstr(s1, love)q=findstr(s1, ok)s3=strrep(s1, i , we )token=strtok(this is a example.)3.字符串比较函数格式:strcmp(s1,s2) 功能:比较字
6、符串s1和s2是否相等。如果相同则返回1,否则返回0格式:strcmpi(s1,s2) 功能:在忽略字母大小写的情况下,比较字符串s1和s2是否相等。如果相同则返回1,否则返回0格式:strncmp(s1,s2,n) 功能:比较两个字符串s1和s2的前n个字符是否相等。如果相同则返回1,否则返回0格式:strncmpi(s1,s2,n) 功能:在忽略字母大小写的情况下,比较字符串s1和s2的前n个字符是否相等。如果相同则返回1,否则返回0字符串比较的例子例 在命令窗口中输入以下语句,观察并分析执行结果str1=hello; str2= hello; str3=hello ;strcmp(str
7、1,str2),strcmp(str1,str3)strcmpi(str1,str2),strcmpi(str1,str3)strncmp(str1,str2,5),strncmp(str1,str3,5)strncmpi(str1,str2,5),strncmpi(str1,str3,5)4. 字符串转换函数字符串转换函数主要有三类:大小写转换、ascii码与字符串之间的转换、数值(或数值数组)与字符串的转换。常用的字符串转换函数upper(a) 把字符串a中的所有小写字母转换为相应的大写字母lower(a) 把字符串a中的所有大写字母转换为相应的小写字母double(x) 将字符串x转换为
8、double型数组(将每个字符的ascii码作为数值型数组的一个元素)char(x) 将ascii码x转换为字符串例: double(abc)为97 98 99,char(97 98 99)为字符串abc; double(123)为49 50 51,char(49 50 51)为字符串123int2str(x) 将整数x转换为字符串num2str(x) 将数值x转换为字符串str=mat2str(mat) 将数值矩阵mat转换为字符串形式,使得由eval(str)可以得到原矩阵mateval(expstr) 执行字符串expstr(执行由字符串expstr描述的命令或求由字符串expstr确定
9、的表达式的值)。例:x=10; s1=int2str(x) 为10f=10.2; s2=num2str(f)为10.2a=1 2 3; 4 5 6; s3=mat2str(a)为1 2 3;4 5 6b=eval(s3)则得到和a完全相同的矩阵b另外,执行strmat=int2str(a)或strmat=num2str(a)的结果是什么?sprintf函数还有一个特别有用的生成字符串的函数:sprintf格式:s,errmsg = sprintf(format,data1,.,datan)功能:按第一个输入参数format指定的格式,输出变量data1,.,datan,将输出的内容作为字符串s
10、。第二个输出参数errmsg是出错信息,可以省略。例: str=sprintf(the value of pi = %8.6f,pi)执行后,str的值为the value of pi = 3.141593例: name=zhang san;sex=male; age=50;record=sprintf(name=%s, sex=%s, age=%d,name,se,age)还有一个和sprintf相对应的、与字符串有关的函数sscanfsprintf将变量输出到字符串,而sscanf将字符串作为输入字符串应用举例基于图像的性别、年龄、人脸识别需要采集许多不同年龄、性别的人的图像用于训练和测试
11、对于每幅图像,要输入人的姓名(name,字符串)、性别(sex=m或f)、年龄(age)等信息假设相应的图像文件名(filename)的命名规则为:姓名_性别_年龄.jpg例如:当name=zhang,sex=m,age=20时,相应的filename=zhang_m_20,jpg问题:对于任意name(姓名),sex(性别),age(年龄) ,自动得到正确的文件名filename方法1. filename1=name _ sex _ num2str(age) .jpg方法2. filename2=sprintf(%s_%s_%d.jpg,name,sex,age)strcmp(filenam
12、e1, filename2)思考题1:如何判断字符串filename是否为jpg文件的文件名思考题2:对于上述例子,如何由文件名filename,得到name(姓名),sex(性别),age(年龄)等的值?与字符串有关的常用函数(小结)获取字符串的基本信息、基本操作(连接、查找、替换等)、字符串比较、字符串转换(大小写、字符与ascii码、数值与字符串等)一定要记住help strfun某个函数的使用方法:help 函数名2.6 元胞数组(cell array)普通的数组:每个数组元素的数据类型、长度都必须相同matlab从5.0版开始引入了一种崭新的数据类型元胞数组,允许在一个数组中存放各种
13、不同类型的数据。元胞数组由规则排列的元胞组成(类似于普通数组和数组元素的关系),其中不同的元胞通过下标来区分。和普通数组不同的是:在一个元胞数组的不同的元胞中可以存放不同类型、不同长度的数据。类似于超市中的物品寄存柜,由整齐地排列成若干行若干列的小格子(单元)组成,每个格子被编号, 每个格子中可以存放任意类型、大小的物品。元胞数组物品寄存柜;元胞-存放物品的格子(单元)2.6.1 元胞数组的建立与显示1. 直接输入整个元胞数组例:s=north,east, south, westa=this is the first example,hadamard(2);ones(3), s 或a=this
14、 is the first example,hadamard(2);ones(3), north,east, south, west例:显示元胞数组a中各个元胞的结构和内容显示元胞的结构(格子物品)a(1,1),a(1,2),a(2,1),a(2,2)或a(1),a(3),a(2),a(4)显示元胞中的内容(物品) a1,1,a1,2,a2,1,a2,2或a1,a3,a2,a4. 元胞与元胞中内容的标识与显示与数值数组一样,元胞数组的维数不受限制,可以是一维、二维或更高维。元胞数组对元胞的编址方法也有单下标编址和全下标编址两种。在元胞数组中,“元胞(元胞数组的元素)”和“元胞中的内容”是两个不
15、同范畴的东西。以二维元胞数组a为例,a(1,2)是指元胞数组a 中第行第列的元胞元素(格子及格子中存放的物品),而a1,2是指元胞数组a 中第行第列元胞中的内容(格子中存放的物品)。元胞数组的显示函数格式:celldisp(c)功能:显示元胞数组的所有元素的内容格式:cellplot(c)功能:以嵌套的格子的形式显示元胞数组的所有元素的结构例:设a是前面例子中创建的元胞数组,在命令窗口输入以下命令,观察执行结果celldisp(a)cellplot(a) 3. 通过元素赋值法创建元胞数组例1 一维元胞数组的建立cleara1=this is the first string;a2=this i
16、s the second string;a3=rand(3);也可以采用下面的形式:cleara(1)=this is the first string;a(2)=this is the second string;a(3)=rand(3);例2 二维元胞数组的建立与显示clears=first line, second line, third linea1,1=this is a example;a1,2=char(first line, second line, third line);a1,3=s;a2,1=magic(3);a2,2=zeros(2,3,4);a2,3=ok;celld
17、isp(a)cellplot(a)也可以采用下面的形式:clears=first line, second line, third linea(1,1)=this is a example;a(1,2)=char(first line, second line, third line);a(1,3)=s;a(2,1)=magic(3);a(2,2)=zeros(2,3,4);a(2,3)=ok;celldisp(a)cellplot(a)4. cell函数建议:先用cell函数创建空的元胞数组,然后再对元胞元素的元素赋值。格式:a=cell(n)功能:创建空的nxn的元胞数组格式:a=cell
18、(m,n)或a=cell(m,n)功能:创建空的mxn的元胞数组例如:clear;a=cell(1,3);a1=first; a2=second;a3=3+4i -5;-10i 3-4i;例clears=first line, second line, third linea=cell(2,3);a1,1=this is a example;a1,2=char(first line, second line, third line);a1,3=s;a2,1=magic(3);a2,2=zeros(2,3,4);a2,3=ok;celldisp(a)cellplot(a)2.6.2 元胞数组内容
19、的调取前面已经讲过,圆括号用于寻访元胞数组的元素(方格+内容),而花括号用于寻访元胞的内容(方格中的内容)。圆括号元胞外标识(cell indexing) 花括号元胞内编址(content addressing)本节将更详细地讲述调取元胞数组内容的方法。(3) 调取一个元胞内部的信息a21=a2,1 , a21(1,:), a21(2,:)或a2,1(1,:), a2,1(2,:)a22=a2,2, a22(1,2),a22(4),a22(1 4 7)或a2,2(1,2),a2,2(4) ,a2,2(1 4 7) a12=a1,2, a121, a122, a123 或a1,21, a1,22
20、, a1,23(4) 子元胞数组(注意:应该用圆括号)b1=a(1,:) ,b2=a(:,2), b3=a(:,1:2), b4=a(1 3 5)b5=a1,2(1:2)(5) 同时调取多个内容comma separated list expansion例:a1 3 5 %等价于a1,a3,a5a: %等价于a1,a2,a6 f1,f2,f3=deal(a1 3 5) %等价于f1=a1,f2=a3,f3=a5x=cell(1,6); %x:等价于x1,x2,xendx: =deal(a:)%等价于x1=a1,x2=a2,xend=aend说明:deal函数把输入参数逐个分配给输出参数。可用h
21、elp deal命令查看其详细用法。例创建一个2x3的元胞数组,然后调取其元素a=this is a example, first line, second line, third line, zeros(2,3,4); char(first line, second line, third line), magic(3), okcelldisp(a)(1) 调取一个元胞c11=a(1,1),c13=a(1,3)class(c11),class(c13)(2) 调取一个元胞的内容a11=a1,1,a13=a1,3class(a11),class(a13)2.6.3 元胞数组的扩展、收缩和重组元
22、胞数组的扩展、收缩和重组的方法大致与数值数组情况相同。以下通过一些例子来说明。例1 元胞数组的扩展a= a1,1 is a string 1+2i ; magic(3) north, eastc=cell(2); %预设c为2x2的空元胞数组c(:,1)=char(another, text string); 10:-1:1%对第1列元胞赋值,注意:左边用圆括号。a3,2=5 %将a扩展为3x2的元胞数组后对a3,2赋值c(3,:)=1 2 %将c扩展为3x2的元胞数组后对c的第3行元胞赋值ac=a c %空格:用来分隔列;水平方向扩展%等价于cat(2,a,c)或horzcat(a,c)ce
23、llplot(ac,legend)a_c=a;c %分号:用来分隔行;垂直方向扩展%等价于cat(1,a,c)或vertcat(a,c)cellplot(a_c,legend)例2 元胞数组的收缩和重组1) 删除整行或整列ac(3,:)= %删除ac的第3行,使ac成为2x4 的元胞数组ac(:,4)= %再删除ac的第4列,使ac成为2x3 的元胞数组2) 重组rac1=reshape(ac,3,2)rac2=reshape(ac,1,6)rac3=ac(:)3)删除一个或几个元胞ac(4)= %删除ac中序号为4的元胞,ac变成1x5的元胞数组rac3(1 4 5)= %删除rac3中的第
24、1,4,5个元胞, rac3变成3x1的元胞数组2.6.4 获取元胞数组的信息class(c) 返回变量c的类型,若c是元胞数组,则返回celliscell(c) 判断变量c是否为元胞数组,若是返回1,否则返回0ndims(c) 返回元胞数组c的维数s=size(c) 或m,n=size(c) 返回元胞数组c各维的大小m=size(c,1) 返回元胞数组c的行数n=size(c,2) 返回元胞数组c的列数numel(c) 返回元胞数组c中元胞的个数length(c) 等于 max(size(c), 若c只有1行或1列元胞,则length(c)等于numel(c)cellfun函数格式: a =
25、 cellfun(fun, c) 功能:将由fun指定的函数作用于元胞数组c的每一个元胞,将结果返回到a中。a的维数、大小与c相同。若c是一行或一列,则a(i)=fun(ci);若c是二维的,则a(i,j)=fun(ci,j)。当fun为字符串isreal, isempty , islogical, length , ndims或prodofsize之一时,意义如表2-16所示。关于cellfun的更详尽的使用说明请查看matlab的帮助文件。2.6.5 元胞数组转换函数格式:c=num2cell(x)功能:将数值数组x转换为维数、大小相同的元胞数组c例:x=1 2 3;4 5 6; c=nu
26、m2cell(x)等价于 c=1 2 3;4 5 6格式:c=mat2cell(x,m,n)功能:将矩阵x分块后存储转换为元胞数组c,m,n一般为向量, m,n的元素决定了矩阵的分块情况。例:在命令行输入x=1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15, c=mat2cell(x,2 1, 2 3) 观察并分析执行结果。格式:m=cell2mat(c)功能:把合适的元胞数组转换为矩阵例1:c = 1 2 3 4; 5; 9 6 7 8; 10 11 12;m = cell2mat(c)例2:clear;x=reshape(1:20,4,5);c=mat2cell(
27、x,2 2,3,2)d=cell2mat(c(1,:)说明: 关于num2cell,mat2cell的其它调用格式请看matlab的帮助文件。2.7 架构数组与元胞数组一样,架构数组(struct array)也能在一个数组里存放各种不同类型的数据。类似于c语言中的结构型数组,但组织数据的能力比c语言中的结构型数组更强、 更灵活、更富于变化。架构数组的每个元素(element)是一个架构(structure),数组中的每个架构是平等的,它们以下标来区分。每个架构(架构数组的元素)由若干个“域” (field) 组成,每个域必须有自己的名字,叫做域名(field name);域的取值叫做域值(f
28、ield value).在实际应用中,部分域值可以不赋值。架构的域中可以存储任意类型、长度的数据,例如:可以是数值型数组、逻辑型数组、字符串、元胞数组等。而且,架构的域中还可以存放一个架构型数组(架构的嵌套使用)。和其它高级语言不同,一个架构数组中不同架构的同名域中可以存储不同类型的数据。与数值数组一样,架构数组维数不受限制, 可以是一维、二维或更高维,不过一维架构数组用得最多。架构数组对架构的编址方法也有单下标编址和全下标编址两种。2.7.1 架构数组的创建三种方法:1)直接创建;2)利用构造函数(struct)创建;3)利用转换函数创建。1. 直接创建法(直接对各个架构的域赋值)例1 单架
29、构(1x1的架构数组)的创建创建一个架构,用来存储一名学生的姓名、学号、性别、年龄等信息。程序如下:s.name= li ming;s.no=19990101;s.sex=m;s.age=18;s例2在例1的基础上,再增加1名学生的信息。s(2).name=zhang mei;s(2).sex=f;ss1=s(1)s2=s(2)也可以通过看作空间浏览器查看已建立的架构数组的内容。例3创建一个架构数组,用来存储一个班级的信息,包括:班主任老师信息(教师资格证编号、姓名、年龄)、学生信息(包括学号、姓名)、课程信息(包括:课程名称、任课教师姓名、学生成绩)可以按照如下方法创建:classinfo.
30、supervisor.no=01065;classinfo.supervisor.name=mu guowang;classinfo.supervisor.age=41;classinfo.students(1).xh=090101;classinfo.students(1).xm=li ming;classinfo.students(2).xh=090102;classinfo.students(2).xm=wang ming;classinfo.students(3).xh=090103;classinfo.students(3).xm=zhang hai;classinfo.course
31、s(1). name=matlab;classinfo.courses(1).teacher=mu guowang;classinfo.courses(1).score=75 80 85;classinfo.courses(2). name=mathematical modeling;classinfo.courses(2).teacher=liu huizhao;classinfo.courses(2).score=70 80 90;例4设某高中有3个年级,每个年级6个班。将例3中的classinfo 扩展成3x6的架构数组,用来存储每个年级每个班的信息,包括:班主任老师信息(教师资格证编号
32、、姓名、年龄)、学生信息(包括学号、姓名)、课程信息(包括:课程名称、任课教师姓名、学生成绩)方法:可用例3中的方法对 classinfo中的每个元素(架构)classinfo(1,1), classinfo(1,2), classinfo(1,6),classinfo(2,1), classinfo(2,2), classinfo(2,6),classinfo(3,1), classinfo(3,2), classinfo(3,6)分别赋值。以下是对架构classinfos(1,1)和classinfos(3,6)赋值的语句,类似地,可以对其它元素(架构)进行赋值。classinfo(3,6
33、).supervisor.no=01002;classinfo(3,6).supervisor.name=li laoshi;classinfo(3,6).supervisor.age=40;classinfo(3,6).students(1).xh=090101;classinfo(3,6).students(1).xm=liu ming;classinfo(3,6).students(2).xh=090102;classinfo(3,6).students(2).xm=ma ming;classinfo(3,6).students(3).xh=090103;classinfo(3,6).s
34、tudents(3).xm=zhang hai;classinfo(3,6).courses(1). name=chinese;classinfo(3,6).courses(1).teacher=zhao laosh;classinfo(3,6).courses(1).score=75 80 85;classinfo(3,6).courses(2). name=english;classinfo(3,6).courses(2).teacher=ma laoshi;classinfo(3,6).courses(2).score=70 80 90;2. 利用构造函数(struct)创建架构数组格式
35、: s=struct(field1,values1,field2,values2,.)功能:用指定的域名和域值创建架构数组s。其中,values1, values2必须是相同大小的元胞数组、1x1的元胞数组或其它类型的任意数据,也可以是空数组()。注意:如果values1, values2中没有包含2个以上元素的元胞数组,则s含有一个元素(架构);否则, values1, values2中除了1x1 的元胞数组外,其它元胞数组的大小必须相同,最后,s的大小和values1, values2中含有2个以上元素的元胞数组大小相同。 clearclassinfo.supervisor.no=0100
36、1;classinfo.supervisor.name=zhang laoshi;classinfo.supervisor.age=38;classinfo.students(1).xh=090101;classinfo.students(1).xm=li ming;classinfo.students(2).xh=090102;classinfo.students(2).xm=wang ming;classinfo.students(3).xh=090103;classinfo.students(3).xm=zhang hai;classinfo.courses(1). name=chine
37、se;classinfo.courses(1).teacher=wang laosh;classinfo.courses(1).score=75 80 85;classinfo.courses(2). name=maths;classinfo.courses(2).teacher=liu laoshi;classinfo.courses(2).score=70 80 90;例5 用struct 函数构造例1中的架构s例1中的语句:s.name= li ming;s.no=19990101;s.sex=m;s.age=18;用struct函数s=struct(name, li ming, no,
38、 19990101,. sex, m , age,18)例6 用struct 函数构造例2中的架构数组s例2中的语句:s.name= li ming; s.no=19990101;s.sex=m;s.age=18;s(2).name=zhang mei; s(2).sex=f;s(1),s(2)用struct函数:s=struct(name, li ming, zhang mei, no, 19990101, sex, m , f , age, 18)s(1),s(2)思考:和例2的结果不一样,如何修改,使得用struct函数构造的结果和例2完全相同?例7 对于例4,可以先构造含有superv
39、isor,students,courses三个域的3x6的空架构数组classinfo,然后,再分别对每个元素(架构)赋值。用struct函数如何实现?方法如下:emptyvalues=cell(3,6);classinfo=struct(supervisor, emptyvalues, students, emptyvalues, courses, emptyvalues)或classinfo=struct(supervisor, emptyvalues, students, , courses, )或classinfo(3,6)=struct(supervisor, , students,
40、 , courses, )对于每个i=1:3,j=1:6,也可以类似地对 classinfo(i,j). supervisor, classinfo(i,j).students和classinfo(i,j).courses进行赋值。例如,对于classinfo(3,6). supervisor,例4中的赋值语句为:classinfo(3,6).supervisor.no=01002;classinfo(3,6).supervisor.name=li laoshi;classinfo(3,6).supervisor.age=40;采用struct函数可以改写为:classinfo(3,6).su
41、pervisor=struct(no, 01002, name,.li laoshi, age,40);在例4中,对classinfo(3,6).courses的赋值语句为:classinfo(3,6).courses(1). name=chinese;classinfo(3,6).courses(1).teacher=zhao laosh;classinfo(3,6).courses(1).score=75 80 85;classinfo(3,6).courses(2). name=english;classinfo(3,6).courses(2).teacher=ma laoshi;cla
42、ssinfo(3,6).courses(2).score=70 80 90;采用struct函数可以改写为:classinfo(3,6) .courses=struct(name,chinese, english, teacher,zhao laosh, ma laosh, score,75 80 85, 70 80 90)或者写成二个语句:classinfo(3,6) .courses(1)=struct(name, chinese, teacher, zhao laosh, score,75 80 85)classinfo(3,6) .courses(2)=struct(name, eng
43、lish, teacher, ma laosh, score, 70 80 90)3. 利用转换函数创建架构数组架构数组还可以通过元胞数组转换得到。格式:s=cell2struct(c,fields,d)功能:把元胞数组c转换为架构数组s。其中,d 表示将第d维转换为域,fields给出了转换后的域名字符串(可以是由字符串组成的元胞数组或字符串矩阵 )。注意:size(c,d) (c的第d维的大小) 必须和fields中给出的域名字符串个数相一致。例如:c=li ming, male,28; f=name, sex, age; 则s=cell2struct(c,f,2)等价于s=struct(
44、name, li ming, sex, male, age,28)补充:由架构数组到元胞数组的转换格式:c=struct2cell(s)功能:把mxn的架构数组s(设有p个域)转换为pxmxn的元胞数组。设field_k是第k个域的域名,则:ck,i,j=s(i,j).(field_k)如果s高维结构数组,则c的大小是p size(s)例: 设有s=struct(name, li ming, sex, male, age,28),则 c=struct2cell(s)得到的结果是:c=li ming; male; 28例:设1x4的架构数组s,内容如下:s(1).name=a;s(1).no=1
45、;s(1).age=11;s(2).name=b;s(2).no=2;s(2).age=12;s(3).name=c;s(3).no=3;s(3).age=13;s(4).name=d;s(4).no=4;s(4).age=14;则c=struct2cell(s)得到3x1x4 的元胞数组cc1,1,1=a;c1,1,2=b;c1,1,3=c;c1,1,4=d;c2,1,1=1;c2,1,2=2;c2,1,3=3;c2,1,4=4;c3,1,1=11;c3,1,2=12;c3,1,3=13;c3,1,4=14;2.7.2 架构数组元素的引用架构数组的元素可以通过架构数组名称、下标、域名来引用。
46、具体格式为:架构数组名(下标). .域名域名例如:例如:s.name=s.name=li mingli ming; ; s.no=s.no=1999010119990101;s.class=;s.class=199901199901; ;s(2).name=s(2).name=zhang meizhang mei; s(2).no=; s(2).no=1999010219990102; ;s(2).sex=s(2).sex=f f; s(2).exams=90 82 88; s(2).exams=90 82 88;average(2)= (s(2).exams(1)+s(2).exams(2)
47、 average(2)= (s(2).exams(1)+s(2).exams(2) +s(2).exams(3)/3+s(2).exams(3)/3s(2).average=mean(s(2).exams)s(2).average=mean(s(2).exams)动态域名动态域名(域名是字符串变量)的情况输入help paren,有关于动态域名的如下说明:.() dot-parentheses are used to reference a structure using a variable for the fieldname. the fieldname is called dynamic
48、 because the name is established at runtime. the syntax for referencing a structure s with dynamic fieldname f is s.(f) 例如:fieldname=average; s(1).(fieldname)s(2).(fieldname)2.7.3 域值操作函数 以下介绍获取架构数组的域名,获取架构某个域的域值、设置架构某个域的域值的几个函数。1. 获取架构数组的域名函数 fieldnames格式:names = fieldnames(s)功能:返回一个元胞数组names, names
49、i是架构数组s的第i个域的域名(字符串),因此,names是一个由字符串组成的元胞数组。英文:names = fieldnames(s) returns a cell array of strings containing the structure field names associated with the structure s.举例:设s.no=01065 ,s.name=mu, s.age=41则names= fieldnames(s)返回元胞数组no, name, ageclass(names)2. 获取域值的函数-getfield格式: f = getfield(s,field
50、) 功能:获取单架构s由field 指定的域的域值,注意:s必须是1x1 的架构数组。等价于语句 f=s.field。英文:f = getfield(s,field) returns the contents of the specified field. this is equivalent to the syntax f = s.field.s must be a 1-by-1 structure. 例:设s.no=01065 ,s.name=mu, s.age=41,则no=getfield(s,no)等价于no=s.no格式: f = getfield (s,i,j,field,k)
51、功能:等价于f = s(i,j).field(k)例: 设有classinfo(3,6).scores=70 75 80 85 90,则f=getfield(classinfo,3,6, scores,2)等价于f= classinfo(3,6).scores(2)例:设有class(6).student(2).scores= 70 75 80; 75 80 85; 80 85 90 ,则f=getfield(class,6,student,2,scores)等价于f= class(6). student(2).scores,f=getfield(class,6,student,2,score
52、s,3,1)等价于f= class(6). student(2).scores(3,1)例:设class(6).student(2).scores= 70 75 80; 75 80 85; 80 85 90则f=getfield(class,6,student,2,scores,3,1)等价于f= class(6). student(2).scores(3,1) 而不等价于f= class(6). student(2).scores3,13. 设置域值的函数-setfield格式: s = setfield(s,field,v) 功能:等价于语句 s.field=v。将单架构s由field 指
53、定的域的域值设置为v,注意:s必须是1x1 的架构数组。英文:s = setfield(s,field) sets the contents of the specified field to the value v. this is equivalent to the syntax s.field = v. s must be a 1-by-1 structure. the changed structure is returned.例:设s.no=01065 ,s.name=mu, s.age=41,则s=setfield(s, no,1065)等价于s.no=1065格式: s = se
54、tfield (s,i,j,field,k,v) 功能:等价于s(i,j).field(k)=v例: 设有classinfo(3,6).scores=70 75 80 85 90,则classinfo=setfield(classinfo,3,6, scores,2,65)等价于classinfo(3,6).scores(2)=65例:设有class(6).student(2).scores= ;scs=70 75 80; 75 80 85; 80 85 90 class=setfield(class,6,student,2,scores,scs)等价于class(6). student(2).scores=scsclass=setfield(class,6,student,2,scores,3,1,85)等价于class(6). student(2).scores(3,1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度演员广告代言合同
- 2025年度医疗机构药品采购委托代购合同
- 农业绿色发展行动计划
- 养老院合同协议书
- 用户体验设计原则及实践
- 简易买卖合同
- 云计算在企业资源规划中的应用
- 三农产品追溯系统建设方案
- 模具设计与制造技术作业指导书
- 建房劳务人工的合同
- 中国哲学史(新)课件
- 考古绘图绪论课件
- 小耳畸形课件
- 新人教版初中初三中考数学总复习课件
- 机械制造有限公司组织架构图模板
- 哗啦啦库存管理系统使用说明
- 小学生读书卡模板
- 8.3 摩擦力 同步练习-2021-2022学年人教版物理八年级下册(Word版含答案)
- 《现代汉语词汇》PPT课件(完整版)
- 生理学教学大纲
- 环保铁1215物质安全资料表MSDS
评论
0/150
提交评论