《三.字符串、元胞和构架数组》由会员分享,可在线阅读,更多相关《三.字符串、元胞和构架数组(63页珍藏版)》请在金锄头文库上搜索。
1、三.字符串、元胞、构架数组,字符串、元胞、构架数组,字符串数组(Character String Array)字符串数组的属性和标识复杂字符串数组的创建串转换函数和串操作函数 元胞数组(Cell Array)元胞数组的创建元胞数组内容的显示元胞数组内容的提取元胞数组的扩充、收缩和重组,字符串、元胞、构架数组(续),构架数组(Structure Array)构架数组的创建构架数组数据的获取和设置构架数组域的获取 数据类型归纳,例3.1 字符串入门,例3.1 字符串入门(续),小结: 在MATLAB中,字符串是作为字符数组来引入的; 一个字符串由多个字符组成,用单引号()来界定; 字符串是按行向量
2、进行存储的,每一字符(包括空格)是以其ASCII码的形式存放。,3.1.1 字符串数组的属性和标识,1. 创建串数组必须将待建字符放在“单引号对”中,当串中本身包含单引号时,每个单引号符用“连续的两个单引号”表示。 2. 串数组的大小size指令可获得串数组的大小。串中的每一个字符,包括中英文字符、空格、标点都算一个元素。,3.1.1 字符串数组的属性和标识(续),3. 串数组的元素标识按从左至右的顺序依次用1、2、3、4 等标识元素在串中的位置。4. 串数组的ASCII码指令abs和double可以显示串数组对应的ASCII码数值数组,指令char则可把ASCII码数值数组转换成串数组。,3
3、.1.1 字符串数组的属性和标识(续),5. 字符串ASCII码数组的操作可以对ASCII码数组进行数值数组的各种运算。但其结果就变成一般数值向量的运算,而不再是字符串的运算。注意: 必须在英文状态下输入“单引号对”。 将多个字符串变量直接用“,”连接,可构成一个较长的新字符串变量。,例3.2 串数组基本操作,3.1.2 复杂字符串数组的创建,1.多行串数组的直接创建 必须保证各行等长,可以利用增减“空格”来 实现。 算例见下页所示:,多行串数组的直接创建,3.1.2 复杂字符串数组的创建(续),2. 利用串操作函数创建多行串数组利用专门的str2mat、strvcat和char函数可以构造出
4、字符串数组,而不必考虑每行的字符数是否相等,总是按最长的设置,不足的末尾用空格补齐。,3.1.2 复杂字符串数组的创建(续),2.利用串操作函数创建多行串数组算例见下页:,利用串操作函数创建多行串数组,区别: str2mat认为空串代表空行; strvcat省略空串。,3.1.2 复杂字符串数组的创建(续),3. 利用串转换函数产生数码字符串常用的数组/字符串转换函数有int2str , num2str , mat2str 。 int2str:把整数数组转换成字符串数组,非整数将被四舍五入后再转换; num2str :把非整数数组转换成字符串数组,常用于图形中数据点的标识; mat2str:把
5、数值数组转换成字符串数组。,利用串转换函数产生数码字符串,例3.3作出函数y=e-2tsin(3t)的图形,并标注最大值点,3.1.3 串转换函数和串操作函数,1. 字符串转换函数(详见P76表3.1-1) 见下页表 2. 字符串操作函数(详见P77表3.1-2) length:用来计算字符串的长度(即组成字符的个数)。 char(s1,s2,):将串s1,s2,逐个写成行,形成多行数组。 class或ischar:用来判断某一个变量是否为字符串。class函数返回char则表示为字符串,而ischar函数返回1表示为字符串。 strcmp(s1,s2):比较字符串s1和s2是否相同。返回值如
6、果为1则相同,为0则不同。 findstr(s1,s2):寻找在某个长字符串s1中的子字符串s2,返回其起始位置。 deblank(s ): 删除字符串尾部的空格。,字符串转换函数:,2.字符串操作函数,2.字符串操作函数(续),执行字符串如果需要直接“执行”某一字符串,可以使用eval命令,效果就如同直接在MATLAB命令窗口内输入此命令。 算例见下页:,eval指令执行字符串,2.字符串操作函数(续),显示字符串字符串可以直接使用disp命令显示出来,即使后面加分号(;)也显示。 算例见下页所示:,disp指令显示字符串,3.2 元胞数组,特点: (1)元胞数组的基本组成单元是元胞(cel
7、l),元胞在数组中以下标 来进行区分; (2)元胞可以是任何类型、任意大小的数组(如:数值数组、字符串数组、符号对象等); (3)一个元胞数组中各个元胞可以是不同类型的内容;元胞数组的维数不受限制,可以采用单下标或全下标寻址; 注意: 元胞和元胞里的内容是两个不同范畴的东西,分别通过“元胞外标识(Cell Indexing)”和”元胞内编址(Content Addressing)”来寻访。“外标识的元胞元素”用圆括号对(),而“编址元胞元素内涵”用花括号对,如A(2,3)表示元胞数组A第2行第3列的元胞,A2,3则表示元胞数组A第2行第3列的元胞中的内容。,3.2.1 元胞数组的创建,1. 直
8、接使用花括号创建 算例见下页所示:,直接使用花括号创建元胞数组,创建的元胞数组中的元胞A(1,1)是字符 串,A(1,2)是数组,A(2,1)是数组,而 A(2,2)为一个元胞数组。,3.2.1 元胞数组的创建(续),2.由各元胞创建外标识元胞元素赋值法 算例见下页所示:,由各元胞创建元胞数组,3.2.1 元胞数组的创建(续),3.由各元胞内容创建 编址元胞元素内涵的直接赋值 算例见下页所示:,由各元胞内容创建元胞数组,3.2.2 元胞数组的内容显示,在MATALB命令窗口中输入元胞数组的名称, 并不直接显示出元胞数组的各元胞元素的内容 值,而是显示各元胞元素的数据类型和结 构 ,单元素的元胞
9、除外。 1.使用celldisp命令显示元胞数组的内容 算例见下页所示:,使用celldisp命令显示元胞数组的内容,表示元胞数组的元胞元素内容, A2,21表示第二行第二列的 元胞元素中存放的元胞数组的第一个 元胞元素的内容。,3.2.2 元胞数组的内容显示(续),2.使用cellplot命令以图形显示元胞数组 的内容 算例见下页所示:,用cellplot命令以图形显示元胞数组的内容,3.2.3 元胞数组的内容获取,1. 取元胞数组的元素内容 算例见下页所示: 注意:x1是数组,x2是标量。,取元胞数组的元素内容,3.2.3 元胞数组的内容获取(续),2. 取元胞数组的元素 算例见下页所示:
10、 3. 使用deal函数取多个元胞元素的内容 算例见下页所示:,取元胞数组的元素,使用deal函数取多个元胞元素的内容,例3.4 元胞数组的基本应用,例3.5 元胞数组的扩充、收缩和重组,3.3 构架数组,特点: 构架数组的基本组成是构架(Structure),以下标区分各个构架; 构架必须划分成“域”后才能使用,每一个构架都包含多个域(Fields) ; 构架不能直接存放数据,数据必须存放在构架下面的“域”中; 构架的域可以存放任意类型、任意大小的数组(数值数组、字符串数组、符号对象、元胞等); 不同构架的同名域中可以存放不同类型的内容; 构架数组可以是任意维的,可以利用单下标或全下标寻址。
11、,3.3.1 构架数组的创建,1.直接创建法直接对域赋值 算例见下页所示:,3.3.1 构架数组的创建-直接创建法,3.3.1 构架数组的创建(续),2. 利用struct函数创建 算例见下页所示:,3.3.1 构架数组的创建-利用struct函数创建,3.3.2 构架数组数据的获取和设置,1.直接获取 算例见下页所示:,构架数组数据的获取直接获取,3.3.2 构架数组数据的获取和设置(续),2. 用getfield获取构架数组的数据 算例见下页所示:,用getfield获取构架数组的数据,3.3.2 构架数组数据的获取和设置(续),3. 用setfield设置构架数组的数据 算例见下页所示:
12、,用setfield设置构架数组的数据,3.3.3 构架数组域的获取,例3.6,已知2输入2输出的LTI系统的传递函数,利 用表示该传递函数的构架数组来练习构架 数组的基本操作。 传递函数为:,例3.6构架数组的基本操作,例3.7 其它命令,例3.7 其它命令(续),小结: 对构架数组增加或减少一个域会影响构架数组内所有的构架; 对某一个构架的域增加或减少一个子域不会影响构架数组内的其它构架。,3.4 数据类型归纳,例3.8构架数组和元胞数组之间的转换,本章小结,1)字符串数组的创建和标识 单引号对(英文状态下输入),复杂串数组的输入 英文字母、空格、数字、标点、中文字符都占一个元素位 2)元胞数组的创建和标识圆括号和花括号的区别元胞可以是任何类型、任意大小的数组,本章小结(续),3)构架数组的创建和标识 构架必须划分成域 域和子域的改变对整个构架数组的影响 构架的域可以存放任何类型、任意大小的数组 4)数据类型转换指令 int2str,mat2str,num2str,str2num,char,double,cell2struct,struct2cell,本章结束,谢谢!,