版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
字符串元胞数组结构数组图文2.5.2常用的字符串函数在strfun函数库中提供了一系列关于字符串的函数,可以通过helpstrfun命令查看有关信息。1.获取字符串的基本信息disp(x)或display(x)显示变量x的内容class(x)以字符串的形式返回变量x的类型名例如:若strA是一个字符串,则class(strA)的值为’char’ischar(x)如果x是一个字符串,则返回1,否则返回0length(x)
若x为字符串,返回x的长度字符串元胞数组结构数组图文isletter(x)逐个检查x的每个元素是否为字母,如果是则返回1,否则返回0,最后返回一个和x同样大小的逻辑数组。
isspace(x)逐个检查x的每个元素是否为空格,如果是则返回1,否则返回0,最后返回一个和x同样大小的逻辑数组。
例如:
在命令窗口中输入以下命令,观察执行结果strA='GuowangMu'disp(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)基本一样strmatch(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=‘IloveMatlab.';strB='HelovesMatlab.';strC='IloveMath.';str=[strAblanks(4)strBblanks(4)strCblanks(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('Thisisaexample.')字符串元胞数组结构数组图文格式:strcmp(S1,S2)功能:比较字符串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(str1,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转换为double型数组(将每个字符的ASCII码作为数值型数组的一个元素)char(X)将ASCII码X转换为字符串[例]:double('abc')为[97
98
99],char([97
98
99])为字符串'abc';double('123')为[49
50
51],char([495051])为字符串'123'字符串元胞数组结构数组图文int2str(X)将整数X转换为字符串num2str(X)将数值X转换为字符串str=mat2str(Mat)将数值矩阵Mat转换为字符串形式,使得由eval(str)可以得到原矩阵Mateval(Expstr)执行字符串Expstr(执行由字符串Expstr描述的命令或求由字符串Expstr确定的表达式的值)。[例]:x=10;s1=int2str(x)为’10’f=10.2;s2=num2str(f)为’10.2’A=[123;456];s3=mat2str(A)为’[123;456]’B=eval(s3)则得到和A完全相同的矩阵B另外,执行strmat=int2str(A)或strmat=num2str(A)的结果是什么?字符串元胞数组结构数组图文sprintf函数还有一个特别有用的生成字符串的函数:sprintf格式:[S,ERRMSG]=sprintf(FORMAT,data1,...,datan)功能:按第一个输入参数FORMAT指定的格式,输出变量data1,...,datan,将输出的内容作为字符串S。第二个输出参数ERRMSG是出错信息,可以省略。例:
str=sprintf('Thevalueofpi=%8.6f',pi)执行后,str的值为'Thevalueofpi=3.141593'例:name='ZhangSan';sex='Male';age=50;Record=sprintf('Name=%s,Sex=%s,Age=%d',name,se,age)还有一个和sprintf相对应的、与字符串有关的函数sscanfsprintf将变量输出到字符串,而sscanf将字符串作为输入字符串元胞数组结构数组图文字符串应用举例基于图像的性别、年龄、人脸识别需要采集许多不同年龄、性别的人的图像用于训练和测试对于每幅图像,要输入人的姓名(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(filename1,filename2)思考题1:如何判断字符串filename是否为jpg文件的文件名思考题2:对于上述例子,如何由文件名filename,得到name(姓名),sex(性别),age(年龄)等的值?字符串元胞数组结构数组图文与字符串有关的常用函数(小结)获取字符串的基本信息、基本操作(连接、查找、替换等)、字符串比较、字符串转换(大小写、字符与ASCII码、数值与字符串等)一定要记住helpstrfun某个函数的使用方法:help函数名字符串元胞数组结构数组图文2.6元胞数组(cellarray)普通的数组:每个数组元素的数据类型、长度都必须相同Matlab从版开始引入了一种崭新的数据类型——元胞数组,允许在一个数组中存放各种不同类型的数据。元胞数组由规则排列的元胞组成(类似于普通数组和数组元素的关系),其中不同的元胞通过下标来区分。和普通数组不同的是:在一个元胞数组的不同的元胞中可以存放不同类型、不同长度的数据。类似于超市中的物品寄存柜,由整齐地排列成若干行若干列的小格子(单元)组成,每个格子被编号,每个格子中可以存放任意类型、大小的物品。元胞数组——物品寄存柜;元胞----存放物品的格子(单元)字符串元胞数组结构数组图文2.6.1元胞数组的建立与显示1.直接输入整个元胞数组例:s={'North','East','South','West'}a={'Thisisthefirstexample',hadamard(2);ones(3),s}
或a={'Thisisthefirstexample',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)显示元胞中的内容(物品)a{1,1},a{1,2},a{2,1},a{2,2}或a{1},a{3},a{2},a{4}字符串元胞数组结构数组图文2.元胞与元胞中内容的标识与显示与数值数组一样,元胞数组的维数不受限制,可以是一维、二维或更高维。元胞数组对元胞的编址方法也有单下标编址和全下标编址两种。在元胞数组中,“元胞(元胞数组的元素)”和“元胞中的内容”是两个不同范畴的东西。以二维元胞数组a为例,a(1,2)是指元胞数组a中第1行第2列的元胞元素(格子及格子中存放的物品),而a{1,2}是指元胞数组a中第1行第2列元胞中的内容(格子中存放的物品)。字符串元胞数组结构数组图文元胞数组的显示函数格式:celldisp(C)功能:显示元胞数组C的所有元素的内容格式:cellplot(C)功能:以嵌套的格子的形式显示元胞数组C的所有元素的结构例:设a是前面例子中创建的元胞数组,在命令窗口输入以下命令,观察执行结果celldisp(a)cellplot(a)字符串元胞数组结构数组图文3.通过元素赋值法创建元胞数组[例1]一维元胞数组的建立clearA{1}='Thisisthefirststring';A{2}='Thisisthesecondstring';A{3}=rand(3);也可以采用下面的形式:clearA(1)={'Thisisthefirststring'};A(2)={'Thisisthesecondstring'};A(3)={rand(3)};字符串元胞数组结构数组图文[例2]二维元胞数组的建立与显示clears={'FirstLine','SecondLine','ThirdLine'}A{1,1}='Thisisaexample';A{1,2}=char('FirstLine','SecondLine','ThirdLine');A{1,3}=s;A{2,1}=magic(3);A{2,2}=zeros(2,3,4);A{2,3}='OK';celldisp(A)cellplot(A)字符串元胞数组结构数组图文也可以采用下面的形式:clears={'FirstLine','SecondLine','ThirdLine'}A(1,1)={'Thisisaexample'};A(1,2)={char('FirstLine','SecondLine','ThirdLine')};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(M,N)或A=cell([M,N])功能:创建空的MxN的元胞数组例如:clear;A=cell(1,3);A{1}=‘First’;A{2}=‘Second’;A{3}=[3+4i-5;-10i3-4i];字符串元胞数组结构数组图文[例]clears={'FirstLine','SecondLine','ThirdLine'}A=cell(2,3);A{1,1}='Thisisaexample';A{1,2}=char('FirstLine','SecondLine','ThirdLine');A{1,3}=s;A{2,1}=magic(3);A{2,2}=zeros(2,3,4);A{2,3}='OK';celldisp(A)cellplot(A)字符串元胞数组结构数组图文2.6.2元胞数组内容的调取前面已经讲过,圆括号用于寻访元胞数组的元素(方格+内容),而花括号用于寻访元胞的内容(方格中的内容)。圆括号——元胞外标识(CellIndexing)花括号——元胞内编址(ContentAddressing)本节将更详细地讲述调取元胞数组内容的方法。字符串元胞数组结构数组图文(3)调取一个元胞内部的信息a21=A{2,1},a21(1,:),a21(2,:)或A{2,1}(1,:),A{2,1}(2,:)a22=A{2,2},a22(1,2),a22(4),a22([147])或A{2,2}(1,2),A{2,2}(4),A{2,2}([147])a12=A{1,2},a12{1},a12{2},a12{3}
或A{1,2}{1},A{1,2}{2},A{1,2}{3}(4)子元胞数组(注意:应该用圆括号)B1=A(1,:),B2=A(:,2),
B3=A(:,1:2),B4=A([135])B5=A{1,2}(1:2)字符串元胞数组结构数组图文(5)同时调取多个内容——Commaseparatedlistexpansion例:A{[135]}
%等价于A{1},A{3},A{5}A{:}%等价于A{1},A{2},…,A{6}
[f1,f2,f3]=deal(A{[135]})
%等价于f1=A{1},f2=A{3},f3=A{5}x=cell(1,6);%x{:}等价于x{1},x{2},…,x{end}[x{:}]=deal(A{:})%等价于x{1}=A{1},x{2}=A{2},…,x{end}=A{end}说明:deal函数把输入参数逐个分配给输出参数。可用helpdeal命令查看其详细用法。字符串元胞数组结构数组图文[例]创建一个2x3的元胞数组,然后调取其元素A={'Thisisaexample',{'FirstLine','SecondLine','ThirdLine'},zeros(2,3,4);char('FirstLine','SecondLine','ThirdLine'),magic(3),'OK'}celldisp(A)(1)调取一个元胞c11=A(1,1),c13=A(1,3)class(c11),class(c13)(2)调取一个元胞的内容a11=A{1,1},a13=A{1,3}class(a11),class(a13)字符串元胞数组结构数组图文2.6.3元胞数组的扩展、收缩和重组元胞数组的扩展、收缩和重组的方法大致与数值数组情况相同。以下通过一些例子来说明。[例1]元胞数组的扩展A={'A{1,1}isastring'1+2i;
magic(3){'North','East'}}C=cell(2);%预设C为2x2的空元胞数组C(:,1)={char('Another','textstring');10:-1:1}%对第1列元胞赋值,注意:左边用圆括号。A{3,2}=5
%将A扩展为3x2的元胞数组后对A{3,2}赋值C(3,:)={12}%将C扩展为3x2的元胞数组后对C的第3行元胞赋值字符串元胞数组结构数组图文AC=[AC]%空格:用来分隔列;水平方向扩展%等价于cat(2,A,C)或horzcat(A,C)cellplot(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([145])=[]
%删除RAC3中的第1,4,5个元胞,
RAC3变成3x1的元胞数组字符串元胞数组结构数组图文2.6.4获取元胞数组的信息class(C)返回变量C的类型,若C是元胞数组,则返回’cell’iscell(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=cellfun(Fun,C)功能:将由Fun指定的函数作用于元胞数组C的每一个元胞,将结果返回到A中。A的维数、大小与C相同。若C是一行或一列,则A(i)=Fun(C{i});若C是二维的,则A(I,j)=Fun(C{i,j})。当Fun为字符串‘isreal’,‘isempty’,‘islogical’,‘length’,‘ndims’或‘prodofsize’之一时,意义如表2-16所示。关于cellfun的更详尽的使用说明请查看Matlab的帮助文件。字符串元胞数组结构数组图文2.6.5元胞数组转换函数格式:C=num2cell(X)功能:将数值数组X转换为维数、大小相同的元胞数组C例:X=[123;456];C=num2cell(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;678910;1112131415],
C=mat2cell(X,[21],[23])
观察并分析执行结果。字符串元胞数组结构数组图文格式:M=cell2mat(C)功能:把合适的元胞数组转换为矩阵例1:C={[1][234];[5;9][678;101112]};M=cell2mat(C)例2:clear;x=reshape(1:20,4,5);C=mat2cell(x,[22],[3,2])D=cell2mat(C(1,:))说明:关于num2cell,mat2cell的其它调用格式请看Matlab的帮助文件。字符串元胞数组结构数组图文2.7架构数组与元胞数组一样,架构数组(StructArray)也能在一个数组里存放各种不同类型的数据。类似于C语言中的结构型数组,但组织数据的能力比C语言中的结构型数组更强、更灵活、更富于变化。架构数组的每个元素(Element)是一个架构(Structure),数组中的每个架构是平等的,它们以下标来区分。每个架构(架构数组的元素)由若干个“域”(field)
组成,每个域必须有自己的名字,叫做域名(fieldname);域的取值叫做域值(fieldvalue).在实际应用中,部分域值可以不赋值。字符串元胞数组结构数组图文架构的域中可以存储任意类型、长度的数据,例如:可以是数值型数组、逻辑型数组、字符串、元胞数组等。而且,架构的域中还可以存放一个架构型数组(架构的嵌套使用)。和其它高级语言不同,一个架构数组中不同架构的同名域中可以存储不同类型的数据。与数值数组一样,架构数组维数不受限制,可以是一维、二维或更高维,不过一维架构数组用得最多。架构数组对架构的编址方法也有单下标编址和全下标编址两种。字符串元胞数组结构数组图文2.7.1架构数组的创建三种方法:1)直接创建;2)利用构造函数(struct)创建;3)利用转换函数创建。1.直接创建法(直接对各个架构的域赋值)[例1]单架构(1x1的架构数组)的创建创建一个架构,用来存储一名学生的姓名、学号、性别、年龄等信息。程序如下:S.name='LiMing';S.no='19990101';S.sex='M';S.age=18;S字符串元胞数组结构数组图文[例2]在例1的基础上,再增加1名学生的信息。S(2).name='ZhangMei';S(2).sex='F';SS1=S(1)S2=S(2)也可以通过看作空间浏览器查看已建立的架构数组的内容。字符串元胞数组结构数组图文[例3]创建一个架构数组,用来存储一个班级的信息,包括:班主任老师信息(教师资格证编号、姓名、年龄)、学生信息(包括学号、姓名)、课程信息(包括:课程名称、任课教师姓名、学生成绩)可以按照如下方法创建:ClassInfo.Supervisor.No='01065';ClassInfo.Supervisor.Name='MuGuowang';ClassInfo.Supervisor.Age=41;ClassInfo.Students(1).XH='090101';ClassInfo.Students(1).XM='LiMing';ClassInfo.Students(2).XH='090102';ClassInfo.Students(2).XM='WangMing';字符串元胞数组结构数组图文ClassInfo.Students(3).XH='090103';ClassInfo.Students(3).XM='ZhangHai';ClassInfo.Courses(1).Name='Matlab';ClassInfo.Courses(1).Teacher='MuGuowang';ClassInfo.Courses(1).Score=[758085];ClassInfo.Courses(2).Name='MathematicalModeling';ClassInfo.Courses(2).Teacher='LiuHuizhao';ClassInfo.Courses(2).Score=[708090];字符串元胞数组结构数组图文[例4]设某高中有3个年级,每个年级6个班。将例3中的ClassInfo扩展成3x6的架构数组,用来存储每个年级每个班的信息,包括:班主任老师信息(教师资格证编号、姓名、年龄)、学生信息(包括学号、姓名)、课程信息(包括:课程名称、任课教师姓名、学生成绩)方法:可用例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).Supervisor.No='01002';ClassInfo(3,6).Supervisor.Name='LiLaoshi';ClassInfo(3,6).Supervisor.Age=40;ClassInfo(3,6).Students(1).XH='090101';ClassInfo(3,6).Students(1).XM='LiuMing';ClassInfo(3,6).Students(2).XH='090102';ClassInfo(3,6).Students(2).XM='MaMing';ClassInfo(3,6).Students(3).XH='090103';ClassInfo(3,6).Students(3).XM='ZhangHai';ClassInfo(3,6).Courses(1).Name='Chinese';ClassInfo(3,6).Courses(1).Teacher='ZhaoLaosh';ClassInfo(3,6).Courses(1).Score=[758085];ClassInfo(3,6).Courses(2).Name='English';ClassInfo(3,6).Courses(2).Teacher='MaLaoshi';ClassInfo(3,6).Courses(2).Score=[708090];字符串元胞数组结构数组图文2.利用构造函数(struct)创建架构数组格式:
S=struct('field1',VALUES1,'field2',VALUES2,...)功能:用指定的域名和域值创建架构数组S。其中,VALUES1,VALUES2…必须是相同大小的元胞数组、1x1的元胞数组或其它类型的任意数据,也可以是空数组([])。注意:如果VALUES1,VALUES2…中没有包含2个以上元素的元胞数组,则S含有一个元素(架构);否则,
VALUES1,VALUES2…中除了1x1的元胞数组外,其它元胞数组的大小必须相同,最后,S的大小和VALUES1,VALUES2…中含有2个以上元素的元胞数组大小相同。字符串元胞数组结构数组图文clearClassInfo.Supervisor.No='01001';ClassInfo.Supervisor.Name='Zhang
Laoshi';ClassInfo.Supervisor.Age=38;ClassInfo.Students(1).XH='090101';ClassInfo.Students(1).XM='LiMing';ClassInfo.Students(2).XH='090102';ClassInfo.Students(2).XM='WangMing';ClassInfo.Students(3).XH='090103';ClassInfo.Students(3).XM='ZhangHai';ClassInfo.Courses(1).Name='Chinese';ClassInfo.Courses(1).Teacher='WangLaosh';ClassInfo.Courses(1).Score=[758085];ClassInfo.Courses(2).Name='Maths';ClassInfo.Courses(2).Teacher='LiuLaoshi';ClassInfo.Courses(2).Score=[708090];字符串元胞数组结构数组图文[例5]用struct函数构造例1中的架构S例1中的语句:S.name='LiMing';S.no='19990101';S.sex='M';S.age=18;用struct函数S=struct('name','LiMing','no','19990101',...'sex','M','age',18)字符串元胞数组结构数组图文[例6]用struct函数构造例2中的架构数组S例2中的语句:S.name='LiMing';
S.no='19990101';S.sex='M';S.age=18;S(2).name='ZhangMei';
S(2).sex='F';S(1),S(2)用struct函数:S=struct('name',{'LiMing','Zhang
Mei'},'no',{'19990101'},'sex',{'M','F'},'age',18)S(1),S(2)思考:和例2的结果不一样,如何修改,使得用struct函数构造的结果和例2完全相同?字符串元胞数组结构数组图文[例7]对于例4,可以先构造含有Supervisor,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',[],'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='LiLaoshi';ClassInfo(3,6).Supervisor.Age=40;采用struct函数可以改写为:ClassInfo(3,6).Supervisor=struct('No','01002','Name',...'LiLaoshi','Age',40);字符串元胞数组结构数组图文在例4中,对ClassInfo(3,6).Courses的赋值语句为:ClassInfo(3,6).Courses(1).Name='Chinese';ClassInfo(3,6).Courses(1).Teacher='ZhaoLaosh';ClassInfo(3,6).Courses(1).Score=[758085];ClassInfo(3,6).Courses(2).Name='English';ClassInfo(3,6).Courses(2).Teacher='MaLaoshi';ClassInfo(3,6).Courses(2).Score=[708090];采用struct函数可以改写为:ClassInfo(3,6).Courses=struct('Name',{'Chinese','English'},'Teacher',{'ZhaoLaosh','MaLaosh'},'Score',{[758085],[708090]})或者写成二个语句:ClassInfo(3,6).Courses(1)=struct('Name','Chinese','Teacher','ZhaoLaosh','Score',[758085])ClassInfo(3,6).Courses(2)=struct('Name','English','Teacher','MaLaosh','Score',[708090])字符串元胞数组结构数组图文3.利用转换函数创建架构数组架构数组还可以通过元胞数组转换得到。格式:S=cell2struct(C,fields,d)功能:把元胞数组C转换为架构数组S。其中,d表示将第d维转换为域,fields给出了转换后的域名字符串(可以是由字符串组成的元胞数组或字符串矩阵)。注意:size(C,d)(C的第d维的大小)
必须和fields中给出的域名字符串个数相一致。例如:c={'LiMing','Male',28};
f={'Name','Sex','Age'};
则S=cell2struct(c,f,2)等价于S=struct('Name','LiMing','Sex','Male','Age',28)字符串元胞数组结构数组图文补充:由架构数组到元胞数组的转换格式:C=struct2cell(S)功能:把MxN的架构数组S(设有P个域)转换为PxMxN的元胞数组。设field_k是第k个域的域名,则:C{k,i,j}=S(i,j).(field_k)如果S高维结构数组,则C的大小是[P
size(S)]例:
设有S=struct('Name','LiMing','Sex','Male','Age',28),则C=struct2cell(S)得到的结果是:C={'LiMing';'Male';28}字符串元胞数组结构数组图文[例]:设1x4的架构数组S,内容如下:S(1).name='A';S(1).no=1;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的元胞数组CC{1,1,1}='A';C{1,1,2}='B';C{1,1,3}='C';C{1,1,4}='D';C{2,1,1}=1;C{2,1,2}=2;C{2,1,3}=3;C{2,1,4}=4;C{3,1,1}=11;C{3,1,2}=12;C{3,1,3}=13;C{3,1,4}=14;字符串元胞数组结构数组图文2.7.2架构数组元素的引用架构数组的元素可以通过架构数组名称、下标、域名来引用。具体格式为:架构数组名(下标).域名例如:S.Name='LiMing';S.No='19990101';S.Class='199901';S(2).Name='ZhangMei';S(2).No='19990102';S(2).sex='F';S(2).exams=[908288];average(2)=(S(2).exams(1)+S(2).exams(2)+S(2).exams(3))/3S(2).average=mean(S(2).exams)字符串元胞数组结构数组图文动态域名动态域名(域名是字符串变量)的情况输入helpparen,有关于动态域名的如下说明:.()
Dot-parenthesesareusedtoreferenceastructureusingavariable
forthefieldname.Thefieldnameiscalled‘dynamic’becausethe
nameisestablishedatruntime.Thesyntaxforreferencinga
structureSwithdynamicfieldnamefis
S.(f)
例如:fieldname=‘average’;
S(1).(fieldname)S(2).(fieldname)字符串元胞数组结构数组图文2.7.3域值操作函数以下介绍获取架构数组的域名,获取架构某个域的域值、设置架构某个域的域值的几个函数。1.获取架构数组的域名——函数fieldnames格式:NAMES=fieldnames(S)功能:返回一个元胞数组NAMES,NAMES{i}是架构数组S的第i个域的域名(字符串),因此,NAMES是一个由字符串组成的元胞数组。英文:NAMES=FIELDNAMES(S)returnsacellarrayofstringscontaining
thestructurefieldnamesassociatedwiththestructures.举例:设S.no='01065',S.name='Mu',S.age=41则NAMES=fieldnames(S)返回元胞数组{'no','name','age'}class(NAMES)字符串元胞数组结构数组图文2.获取域值的函数-getfield格式:
F=getfield(S,'field')功能:获取单架构S由‘field’指定的域的域值,注意:S必须是1x1的架构数组。等价于语句。英文:F=GETFIELD(S,‘field’)returnsthecontentsofthespecified
field.ThisisequivalenttothesyntaxF=S.field.Smustbea1-by-1structure.例:设S.no='01065',S.name='Mu',S.age=41,则no=getfield(S,’no’)等价于字符串元胞数组结构数组图文格式:
F=getfield(S,{i,j},'field',{k})功能:等价于F=S(i,j).field(k)例:
设有ClassInfo(3,6).Scores=[7075
8085
90],则F=getfield(ClassInfo,{3,6},'Scores',{2})等价于F=ClassInfo(3,6).Scores(2)例:设有Class(6).Student(2).scores=[707580;758085;808590],则F=getfield(Class,{6},'Student',{2},'scores’)等价于F=Class(6).Student(2).scores,F=getfield(Class,{6},'Student',{2},'scores',{3,1})等价于F=Class(6).Student(2).scores(3,1)例:设Class(6).Student(2).scores={707580;758085;808590}则F=getfield(Class,{6},'Student',{2},'scores',{3,1})等价于F=Class(6).Student(2).scores(3,1)
而不等价于F=Class(6).Student(2).scores{3,1}字符串元胞数组结构数组图文3.设置域值的函数-setfield格式:
S=setfield(S,'field',V)功能:等价于语句S.field=V。将单架构S由‘field’指定的域的域值设置为V,注意:S必须是1x1的架构数组。英文:S=SETFIELD(S,‘field’
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Photoshop 期末考试试题(含详细答案解析)
- 2025-2026学年山西省晋城市初中数学九年级期末下册模考快速提分卷附答案
- PCS过程控制系统期末考试试题及详细答案
- 年度综合应急救援演练方案
- 距骨软骨损伤保守康复运动清单规范共识
- 高压开关柜检修安全操作规程
- PADI OW开放水域潜水员结业考试真题及详细答案
- OQC成品出货检验员考核试题(含详细答案)
- 职业性砷中毒远期脏器损害随访共识
- 线下快闪店主题策划与视觉呈现方案
- 2025年10月自考14658政治经济学(中级).试题及答案
- 新时代中国特色社会主义与实践(2024版)课后思考题答案
- GB/T 46199-2025非开挖铺设用球墨铸铁管
- 2025年肿瘤专科护士试题及答案
- GJB373B-2019引信安全性设计准则
- 中枢性尿崩症与原发性烦渴的精准诊疗:31例临床深度剖析
- 煤矿核子称管理制度
- 简单的机械加工合同
- 幼儿园烫伤应急处理培训
- 《回弹法检测水泥基灌浆材料抗压强度技术规程》
- 扇贝买卖合同
评论
0/150
提交评论