1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,2-6,、字符串、元胞数组和构架数组,字符串设定和操作,元胞数组生成和操作,构架数组的生成和操作,Matlab,语言数据类型,数,组是由下标与值组成的数偶的有序集合,即对于每组有定义的下标总有一个相应的,数值。,与之对应,都是同一数据类型的数。,字符,型数据(,Character String Array,)的操作通过,字符串,操作进行,不同数据类型,但是相关的数据集成为统一的变量,进行组织和访问可以通过,元胞数组,(,Cell array,)和,构架数组,(,Structure array,)管理,四种数
2、据类型构成比较,数组类型,基本组分,组分内涵,基本组分占用字节数,数值数组,元素,双精度实数标量,或双精度复数标量,8,16,字符串数组,元素,字符,2,元胞数组,元胞,可以存放任何类型、任何大小的数据,不定,构架数组,构架,只有挂接在构架上的“域”才能存放数据。数据可以是任何类型、任何大小,不定,2-6-1,、字符串数组,字符串生成:用 将设定字符串引注,s=good;u=boys;,b=blanks(5),v=s,b,u,v=s;u,每行含有相同数目字符,可用,语句生成多行字符串:,字符总数中包含空格,汉字算一个字符,a=I have,manyfriends,They are very g
3、ood,每行有不同数目字符的多行字符串,用,char,语句:,s=,char(I,have many friends,They are very good),%w=good boys,%v=good,boys,常见字符串操作,字符串读取:,u=,好好,xue,习,天天,xiang,上,u,或,disp(u,),%,disp(u,),不显示,u=,t=u(5),%,将,u,中第,5,个字符赋给,t,,,t=e,d=u(8:end),%,将,u,中第,8,个字符及以后字符赋给,d,,,d,=,天天xiang上,t1=s(1,1:end),%,将,s,中第,1,行字符赋给,t1,t1=I have
4、many friends,字符串链接:,p=,char(t,xue习,),%,垂直链接,t,和,xue,习,p=,strcat(t,xue习,),%,行链接,t,和,xue,习,p=,strvcat(t,xue习,),%,垂直链接,t,和,xue,习,常见字符串操作,字符串检验:,x=,isletter(s,),%,x,为与,s,字符量相等的,0/1,矩阵,y=,isspace(s,),%,字符串中空格检验,与,x,中,0/1,元素互补;,strjust(s,),%,判断是否为字符串,是,-,输出字符;,否,,如:,a=1 2 6 78,strjust(a,),,,输出,ans,=N,更改大小
5、写:,ls,=,lower(s,),%,将,s,中字符全部小写赋给,ls,,,s,本身大小写不变,us=,upper(s,),%,将,s,中字符全部大写赋给,us,,,s,本身大小写不变,字符串的,ASCII,码操作及逆操作:,t=,abs(u,),%,matlab,中每个字符占用,16,个位,,,t,为与,u,字符量相等的双精度数组,v=,char(t,),%,逆操作,将,t,翻译回字符。,常见字符串操作,字符串比较:,只应用于单行字符串,strcmp(u,v,),%,判断字符数是否相等,strncmp(u,v,5),%,比较字符前,5,个字符是否相同,查找字符串:,只应用于单行字符串,st
6、rfind(t1,e),findstr(e,t1,),或,(,t1,e),%,位置可换,字符替换:,只应用于单行字符串,e=,strrep(,u,xue,学,),%,将,u,中,xue,用“学”替换,删除字符:,只应用于单行字符串,e=,strrep(u,xue,),%,将,u,中,xue,删除,常见字符串操作函数表,strcat,链接字符串,strvcat,垂直链接字符串,strcmp,比较字符串大小,单,strncmp,比较字符串的前,n,个字符,单,findstr,(,strfind,),在字符串中寻找字符,单,strjust,证明字符数组,ischar,字符串检验,strrep,用其他
7、字符串代替改串,单,deblank,删除字符串尾空格,blanks,生成空字符串,isspace,空格检验,isletter,字母检验,lower,改字符串为小写,upper,改字符串为大写,2-6-2,、元胞数组,元胞数组,(Cell array),是,Matlab,语言中比较特殊的一种数据结构。,数组的基本结构是元胞,(cell),,每个元胞在数组中是平等的,只能以下标区分。,元胞可以存放任何类型、任何大小的数组(如任意维数值数组、字符串数组、符号对象等)。而且,同一个元胞数组中的各元胞的内容可以不同。,2-6-2,、元胞数组,元胞数组对元胞的编址有单下标和全下标,2,种。,元胞数组中,元
8、胞和元胞里的内容属于两个不同范畴:元胞外标识,(Cell indexing),和元胞内编址,(Content Addressing),。,两者的寻访操作也不同。以二维元胞数组,A,为例,,A(2,3),表示第,2,行第,3,列的元胞(,外标识元胞,用,(),),而,A2,3,是指第,2,行第,3,列的元胞中所存储的内容(,编址元胞内元素内涵,用,)。,2-6-2,、元胞数组,元胞数组生成:,1,、使用,cell,函数:,b=cell(10),%,生成,10*,10,的,2,维元胞数组,a=cell(5,3),%,生成,5,行,3,列的,2,维元胞数组,cell(10,5,2),%,生成,2,个
9、10,行,5,列的,3,维元胞数组,c=,cell(size(a,),%,生成与,a,同行列元胞数组,a1,1=1 2;2 2;,%,元胞数组,a,的第,1,行,1,列的元胞用于存放,2,维数值数组,a1,2=Matlab7,%,元胞数组,a,的第,1,行,2,列的元胞用于存放字符串,2,、直接生成:,d=Hello,Good,568,你好,%1x4 cell,2-6-2,、元胞数组,元胞数组操作,1,、元胞数组内容显示和获取:,celldisp(a,),%,显示元胞数组,a,的详细内容,celldisp(a(1),%,显示元胞数组,a,中第一个元胞的详细内容,celldisp(a(3,1)
10、显示元胞数组,a,中第,3,行第,1,列元胞的详细内容,celldisp(a,b,),%,以,b,为名称显示元胞数组,a,的内容,cellplot(a,),%,图形显示元胞数组,a,的内容,b=a1*2,%,将,2,倍的元胞数组,a,中第一个元胞值赋给,b,c,=a3,1*2,%,将,2,倍的元胞数组,a,中第,3,行第,1,列元胞值赋给,c,元胞数组操作,2,、元胞数组的变维处理,增加或删除元胞数组的单元:,a=cell(2,2),%,生成,2,行,2,列元胞数组,a,a1,1=,试试看,%,给元胞数组,a,中第一个元胞赋值,a3,1=i,12-4i,%,元胞数组,a,增加第,3,行元
11、胞,a(3,:)=,%,删除第三行元胞,,不是,a3,:=,改变元胞数组结构:,d=reshape(a,1,4),%,将,a,所有元素分配到,14,的元胞数组,d,中,e=reshape(a,1,2,2),%,将,a,所有元素分配到,2,个,12,的,3,维元胞数组,e,中,2-6-3,、,构架数组,与元胞数组一样,构架数组也可以把不同类型数据组合在一起。,数组的基本成分是构架,且每个构架是平等的,以下标区分。,构架必须在划分域后才能使用,数据不能直接存放在构架上。,构架的域可以存放任何类型、大小的数组,不同构架的同名域中存放的内容可以不同。,2-6-3,、,构架数组,与元胞数组一样,构建数组
12、没有维数限制。其中一维构建数组用得最多。,元胞数组,A1,构架数组,A(1).p,,,1,为构架下标,,p,为域名。,2-6-3,、,构架数组,1,、构架数组生成:,直接输入法,student.name=Wuyu,%,构架数组,student,域,name,赋值,student.test=99 85 62 70;,%,构架数组,student,域,test,赋值,student,%,显示构架数组,student,struct,函数法,a=struct(dizh,dalian,shijian,10),%,生成构架数组,a,,域,dizh,中存贮元胞数组,域,shijian,中存贮数值数组),a.
13、dizh,%,域,dizh,中存贮内容,a.shijian,%,域,shijian,中存贮内容,构架数组与元胞数组比较,元胞数组,构架数组,举例,(3,4,),元胞数组,A,(3,4,),构架数组,B,,有,f1,f2,两个域,基本组分,(Element),元胞,(Cell),构架,(Structure),对基本组分的编址,数码标识:如,A(4),A(2,3),数码标识:如,B(4),B(2,3),可存放的数据类型,任何类型,任何类型,(,数值,字符,元胞,构架等,),直接存放数据的场所,元胞,如,A(2,3),域,如,B(2,3).fl,基本组分的寻访方式,被标识的元胞名,如,A(2,3),
14、被标识的构架名,如,B(2,3),具体内容的寻访方式,标识元胞名,如,A2,3,带域名的标识构架名,如,B(2,3).fl,实现元胞数组与构架数组间的转换指令,cell2struct,元胞数组转化成构架数组,struct2cell,把构架数组转化成元胞数组,2-6-3,、,构架数组,2,、构架数组操作:,添加新构架:,student(2).test=56 78 89;,%,给第,2,个构架域,test,赋值,student(2).name=,Heli,%,给第,2,个构架域,name,赋值,添加新域:,student(1).age=20,删除域:,student=,rmfield(studen
15、t,age,),调用构架数组数据:,b=student(2).test(3),更改构架数组数据:,student(1).name=upper(student(1).name),小结练习,1,、将,Dalian University of Technology,改为大写。,2,、创建元胞数组,cell07,和构架数组,struct07,,用于计算本课程成绩。包括平时成绩,15,次,考试成绩一次。构建数组域包括:姓名(,name,)、平时成绩(,exer,)、考试成绩(,exam,)和综合课程成绩(,gen,)。按学号将自己的姓名和前三次平时成绩(旷课填,0,,否则填,2,)填入相应的元胞和构架域内。,






