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