《字符串、单元数组和结构体.ppt》由会员分享,可在线阅读,更多相关《字符串、单元数组和结构体.ppt(20页珍藏版)》请在金锄头文库上搜索。
1、Hefei University of TechnologyInstitute of Sound and Vibration Research字符串、单元数组和结构体字符串及其生成字符串及其生成 字符串是字符串是MATLAB语言的重要组成部分。语言的重要组成部分。 一个字符串是存储在一个行向量中的文本,这个行向一个字符串是存储在一个行向量中的文本,这个行向量中的每一个元素代表一个字符。实际上元素中存放的量中的每一个元素代表一个字符。实际上元素中存放的是字符的内部代码,也就是是字符的内部代码,也就是ASCII码码,因此字符串为,因此字符串为ASCII值值 的数值数组,但是作为字符串表达式进行显示
2、。的数值数组,但是作为字符串表达式进行显示。 在在 MATLAB 中,生成字符串的方法为中,生成字符串的方法为 stringname=the content of the string。2字符串及其生成字符串及其生成例:例: str=Hefei University of Technologystr =Hefei University of Technology size(str)ans=1 30 abs(str)ans =Columns 1 through 2172 101 102 101 105 32 85 110 105 118 101 114 115 105 116 121 32 11
3、1 102 32 84Columns 22 through 30101 99 104 110 111 108 111 103 1213字符串及其生成字符串及其生成字符串是一个字符串是一个 ASCII 码的字符数组,因此,与普通数组一样,字码的字符数组,因此,与普通数组一样,字符串也可以形成矩阵(表现为一个字符串有多行)。但是,这些符串也可以形成矩阵(表现为一个字符串有多行)。但是,这些行必须有相同数目的列数。行必须有相同数目的列数。例如:例如:str=Hefei University of Technology ; arguments dimension consistentstr =Hefe
4、i University of Technologyarguments dimension consistentstr=Hefei University of Technology ; arguments dimension not consistent? Error using = vertcatCAT arguments dimensions are not consistent.4字符串及其生成字符串及其生成 使用使用 char 函数可以创建长度不一致的字符串矩阵。函数可以创建长度不一致的字符串矩阵。char 函数自动将所有字符串的长度设置为输入字符串中长度函数自动将所有字符串的长度设置
5、为输入字符串中长度的最大值的最大值str=char(Hefei University of Technology ; arguments dimension not consistent)str =Hefei University of Technology arguments dimension not consistent5字符串操作字符串操作字符串显示字符串显示 字符串的显示字符串的显示字符串的显示有两种方式:直接显示和利用字符串的显示有两种方式:直接显示和利用 disp 函数进函数进行显示。行显示。 str=Hefei University of Technology;strstr =
6、Hefei University of Technologydisp(str)Hefei University of Technology注意:注意:disp不显示变量名不显示变量名6字符串操作字符串操作字符串运算字符串运算 字符串的运算主要包括:字符串的运算主要包括:1. 判断字符串是否相等判断字符串是否相等2. 通过字符串运算来比较字符串中的字符通过字符串运算来比较字符串中的字符3. 进行字符分类、查找与替换进行字符分类、查找与替换4. 字符串与数值数组之间的相互转换字符串与数值数组之间的相互转换 函数名函数名函数用途函数用途函数名函数名函数用途函数用途strcat横向连接字符串横向连接字
7、符串strvcat纵向连接字符串纵向连接字符串strcmp字符串比较字符串比较strncmp比较字符串的前比较字符串的前n 个字符个字符findstr字符串查找字符串查找strjust字符串对齐字符串对齐strmatch字符串匹配字符串匹配strrep字符串查找与替换字符串查找与替换strtok选择字符串中的部分选择字符串中的部分blanks创建由空格组成的字符创建由空格组成的字符串串deblank删除字符串结尾的空格删除字符串结尾的空格ischar判断变量是否为字符串判断变量是否为字符串iscellstr判断字符串单元数组判断字符串单元数组isletter判断数组是否由字母组判断数组是否由字
8、母组成成isspace判断是否空格判断是否空格stringsMATLAB 字符串句柄字符串句柄7字符串操作字符串操作字符串运算字符串运算字符串比较字符串比较字符串的比较字符串的比较 字符串的比较主要为比较两个字符串是否相同,字符字符串的比较主要为比较两个字符串是否相同,字符串中的子串是否相同和字符串中的个别字符是否相同。串中的子串是否相同和字符串中的个别字符是否相同。用于比较字符串的函数主要是用于比较字符串的函数主要是 strcmp 和和 strncmp。strcmp:用于比较两个字符串是否相同。用法为:用于比较两个字符串是否相同。用法为 strcmp(str1,str2),当两个字符串相同时
9、返回,当两个字符串相同时返回1,否则返,否则返回回0。当所比较的两个字符串是字符数组时,返回值为。当所比较的两个字符串是字符数组时,返回值为一个列向量,元素为相应行比较的结果。一个列向量,元素为相应行比较的结果。strncmp:用于比较两个字符串的前面几个字符是否:用于比较两个字符串的前面几个字符是否相同。用法为相同。用法为 strncmp(str1,str2,n), 当字符串的前当字符串的前 n 个字符相同时返回个字符相同时返回1,否则返回,否则返回 0。当所比较的两个字。当所比较的两个字符串时单元数组时,返回值为列向量,元素为相应行符串时单元数组时,返回值为列向量,元素为相应行比较的结果。
10、比较的结果。8字符串操作字符串操作字符串运算字符串运算字符串比较字符串比较 除了利用上面两个函数进行比较之外,还可以通过简除了利用上面两个函数进行比较之外,还可以通过简单运算比较两个字符串。当两个字符串拥有相同的维数单运算比较两个字符串。当两个字符串拥有相同的维数时,可以利用时,可以利用 MATLAB 运算法则,对字符数组进行比运算法则,对字符数组进行比较。字符数组的比较与数值数组的比较基本相同,不同较。字符数组的比较与数值数组的比较基本相同,不同之处在于字符数组比较时进行比较的是字符的之处在于字符数组比较时进行比较的是字符的 ASCII 码码值。进行比较返回的结果为一个数值向量,元素为对应值
11、。进行比较返回的结果为一个数值向量,元素为对应字符比较的结果。需要注意的是在利用这些运算比较字字符比较的结果。需要注意的是在利用这些运算比较字符串时,相互比较的两个字符串必须有相同数目的元素。符串时,相互比较的两个字符串必须有相同数目的元素。符号符号符号意义符号意义=等于等于=不等于不等于大于大于=大于等于大于等于9字符串操作字符串操作字符串运算字符串运算字符串比较字符串比较 除上面介绍的两个字符串之间的比较之外,除上面介绍的两个字符串之间的比较之外,MATLAB 还可以判断字符串中的字符是否为空格字符或者字母。还可以判断字符串中的字符是否为空格字符或者字母。实现这两个功能的函数分别为实现这两
12、个功能的函数分别为 isspace 和和isletter。下面分。下面分别介绍这两个函数。别介绍这两个函数。isspace:用法为:用法为 isspace(str),判断字符串,判断字符串 str 中的字中的字符是否为空格,是空格字符则返回符是否为空格,是空格字符则返回1,否则返回,否则返回0。isletter:用法为:用法为 isletter(str),判断字符串,判断字符串 str 中的字中的字符是否为字母,是字母则返回符是否为字母,是字母则返回1,否则返回,否则返回0。10字符串操作字符串操作字符串运算字符串运算字符串查找与替换字符串查找与替换查找与替换是字符串操作中的一项重要内容。用于
13、查找查找与替换是字符串操作中的一项重要内容。用于查找的函数主要有的函数主要有 findstr,strmatch,strrep,strtok 等。等。findstr:用于在一个字符串中查找子字符串,返回子:用于在一个字符串中查找子字符串,返回子字符串出现的起始位置。用法为字符串出现的起始位置。用法为findstr(str1,str2),执,执行时系统首先判断两个字符串的长短,然后在长的字行时系统首先判断两个字符串的长短,然后在长的字符串中检索短的子字符串。符串中检索短的子字符串。 strrep:查找字符串中的子字符串并将其替换为另一:查找字符串中的子字符串并将其替换为另一个子字符串。用法为个子字
14、符串。用法为 str = strrep(str1, str2, str3),将,将 str1 中的所有子字符串中的所有子字符串 str2 替换为替换为 str3。11字符串操作字符串操作字符串运算字符串运算字符串查找与替换字符串查找与替换 函数函数findstr和和strrep应用举例:应用举例: str=String Searching and Replacing; findstr (str, and)ans= 18 findstr (and, str)ans= 18 str1=strrep(str, Replacing, String Replacing)str1=String Searc
15、hing and String Replacing 12字符串操作字符串操作字符串与数值之间的转化字符串与数值之间的转化 一个字符串是由单引号括起来的简单文本。在字符串一个字符串是由单引号括起来的简单文本。在字符串中的每个字符都是数组中的一个元素,这些数字是由中的每个字符都是数组中的一个元素,这些数字是由 ASCII 字符表示的。这些字符和整数之间可以相互转化。字符表示的。这些字符和整数之间可以相互转化。 首先,可以将字符串转化为数组。首先,可以将字符串转化为数组。 所使用的函数为所使用的函数为abs 例:例: str1=Hefei University of Technology; str2
16、=arguments dimension consistent ans1=abs(str1); ans2=abs(str2); 13字符串操作字符串操作字符串与数值之间的转化字符串与数值之间的转化 也可以将数组转化为字符串也可以将数组转化为字符串 str=char(ans1,ans2)str=Hefei University of Technology arguments dimension consistent 还可以把数值直接变为对应的字符,注意这种情况并没有还可以把数值直接变为对应的字符,注意这种情况并没有和和ASCII 码对应码对应, 或者说直接把变量的类型从数字型变或者说直接把变量的
17、类型从数字型变为字符型。为字符型。 x=-2:1:2; str=num2str(x)14单元数组单元数组 单元数组单元数组(cell array)将不同的相关数据集成到一个单将不同的相关数据集成到一个单一的变量中,使得大量数据的处理和引用变得简单而方一的变量中,使得大量数据的处理和引用变得简单而方便。需要注意单元数组仅仅是承载其他数据类型的容器,便。需要注意单元数组仅仅是承载其他数据类型的容器,不队单元数组本身进行运算。不队单元数组本身进行运算。 单元数组中的每一个元素称为单元(单元数组中的每一个元素称为单元(cell)。单元中)。单元中的数据可以为任何数据类型,包括数值数组、字符、符的数据可
18、以为任何数据类型,包括数值数组、字符、符号对象、其他单元数组。不同的单元中的数据类型可以号对象、其他单元数组。不同的单元中的数据类型可以不同。不同。 15单元数组单元数组创建创建 用户可以通过两种方式创建一个单元数组:用户可以通过两种方式创建一个单元数组:一个是通过赋值语句直接创建;一个是通过赋值语句直接创建;二是利用二是利用 cell 函数先为单元数组分配一个内存空间,函数先为单元数组分配一个内存空间,然后再给各个单元赋值。然后再给各个单元赋值。l 直接赋值法通过给每个单元逐个赋值来创建单元直接赋值法通过给每个单元逐个赋值来创建单元数组。单元数组用花括号表示,在赋值时需要将单元数组。单元数组
19、用花括号表示,在赋值时需要将单元内容用花括号(即内容用花括号(即)括起来。)括起来。l 用用 cell 函数创建单元数组。步骤为:首先用函数创建单元数组。步骤为:首先用 cell 函数创建一个空的单元数组,然后再为数组元素赋值函数创建一个空的单元数组,然后再为数组元素赋值16单元数组单元数组元素访问元素访问 使用圆括号和花括号对单元数组索引是不同的。当采使用圆括号和花括号对单元数组索引是不同的。当采用圆括号时表示的是该单元,而采用花括号时则表示的用圆括号时表示的是该单元,而采用花括号时则表示的是该单元的内容。是该单元的内容。 在在 MATLAB 单元数组索引中,圆括号用于标志单元、单元数组索引
20、中,圆括号用于标志单元、花括号用于按单元的寻址。花括号用于按单元的寻址。17单元数组单元数组显示显示 在显示单元数组时在显示单元数组时 MATLAB 有时只显示单元的大小和有时只显示单元的大小和数据类型,而不显示每个单元的具体内容。若要显示单数据类型,而不显示每个单元的具体内容。若要显示单元数组的内容,可以用元数组的内容,可以用 celldisp 函数。函数。 celldisp 函数用于显示单元数组的全部内容,有时候只函数用于显示单元数组的全部内容,有时候只需要显示单元数组的一个单元,可以用花括号对单元进需要显示单元数组的一个单元,可以用花括号对单元进行索引。行索引。 除上面的单元数组查看方式
21、外,除上面的单元数组查看方式外,MATLAB 支持以图形支持以图形方式查看单元数组的内容。用这种方法可以直观的看出方式查看单元数组的内容。用这种方法可以直观的看出单元数组的结构。但是需要注意的是,单元数组的结构。但是需要注意的是,cellplot 只能用于只能用于显示二维单元数组的内容。显示二维单元数组的内容。18结构数组结构数组 结构数组是除了单元数组之外,另外一种可以结构数组是除了单元数组之外,另外一种可以把不同类型数据组合在一起的数据类型。把不同类型数据组合在一起的数据类型。 结构数组和单元数组的区别为:结构体有一个结构数组和单元数组的区别为:结构体有一个名字,结构体的每个成员元素也有自
22、己的名字,名字,结构体的每个成员元素也有自己的名字,其元素访问是通过元素的名字来实现的。其元素访问是通过元素的名字来实现的。19ASCII码码 ASCII码码(American Standard Code for Information Interchange,美国标准信息交换码)是由美国国家标准局,美国标准信息交换码)是由美国国家标准局(ANSI)制定,它已制定,它已被国际标准化组织(被国际标准化组织(ISO)定为国际标准,称为)定为国际标准,称为ISO 646标准。适标准。适用于所有拉丁文字字母,用于所有拉丁文字字母,ASCII码有码有7位码和位码和8位码两种形式。其位码两种形式。其中标准
23、中标准ASCII码是码是7位码。位码。7位位ASCII码是用七位二进制数进行编码是用七位二进制数进行编码的,可以表示码的,可以表示128个字符。个字符。第第032号及第号及第127号号(共共34个个)是控制字符或通讯专用字符,如控是控制字符或通讯专用字符,如控制符:制符:CR(回车)、(回车)、FF(换页)、(换页)、DEL(删除)、(删除)、BS(退格(退格)等;等;通讯专用字符:通讯专用字符:SOH(文头)、(文头)、EOT(文尾)、(文尾)、ACK(确认)等;(确认)等; 第第33126号号(共共94个个)是字符,其中第是字符,其中第4857号为号为09十个阿拉伯十个阿拉伯数字;数字;6590号为号为26个大写英文字母,个大写英文字母,97122号为号为26个小写英文个小写英文字母,其余为一些标点符号、运算符号等。字母,其余为一些标点符号、运算符号等。 20