MATLAB 7.X程序设计语言 第二版 楼顺天5-7 第7章

上传人:E**** 文档编号:89355886 上传时间:2019-05-23 格式:PPT 页数:129 大小:525KB
返回 下载 相关 举报
MATLAB 7.X程序设计语言 第二版 楼顺天5-7 第7章_第1页
第1页 / 共129页
MATLAB 7.X程序设计语言 第二版 楼顺天5-7 第7章_第2页
第2页 / 共129页
MATLAB 7.X程序设计语言 第二版 楼顺天5-7 第7章_第3页
第3页 / 共129页
MATLAB 7.X程序设计语言 第二版 楼顺天5-7 第7章_第4页
第4页 / 共129页
MATLAB 7.X程序设计语言 第二版 楼顺天5-7 第7章_第5页
第5页 / 共129页
点击查看更多>>
资源描述

《MATLAB 7.X程序设计语言 第二版 楼顺天5-7 第7章》由会员分享,可在线阅读,更多相关《MATLAB 7.X程序设计语言 第二版 楼顺天5-7 第7章(129页珍藏版)》请在金锄头文库上搜索。

1、第七章 字符串处理,7.1 字符阵列 7.2 字符串单元阵列 7.3 字符串比较 7.4 字符串搜索与取代 7.5 字符串与数值之间的变换 7.6 综合设计示例 7.7 字符串函数 习题,7.1 字 符 阵 列,在MATLAB中,字符是以其ASCII码表示的,这样可直接在屏幕上显示字符或者在打印机上打印字符。输入字符数据时应用单引号括起来,例如输入 name=西安电子科技大学电子工程学院; 这时采用class命令可以检查其类型 class(name) ans= char,这说明变量name的类型为字符型,再输入 size(name) ans= 1 14 这说明name占用114向量,从这可以看

2、出每个汉字只占用一个字符位置。众所周知,一个汉字需要用两个字节的内码表示,每个字符应该占用两个字节,这一点可由下列命令得到证实:, name1=MATLAB; whos Name Size Bytes Class ans 1x4 8 char array name 1x14 28 char array name1 1x6 12 char array Grand total is 24 elements using 48 bytes,变量name含有14个汉字,占用了28个字节,然而,name1包含有6个英文字母,占用12个字节,这说明每个字符都采用16位的ASCII码存储。,7.1.1 字符与

3、ASCII码之间的变换 在MATLAB中,每个字符按16位的ASCII码存储,这大大方便了在MATLAB中使用双字节内码字符集,如汉字系统。利用double和char函数可在字符与其ASCII码之间进行转换。例如,在得到上述name和name1后输入, a1=double(name1) a1 = 77 65 84 76 65 66 a=double(name) a = Columns 1 through 8,52983 45234 46567 55251 49094 48316 46323 53671 Columns 9 through 14 46567 55251 47524 46028 5

4、3671 54458 aname1=char(a1) aname1 = MATLAB aname=char(a) aname = 西安电子科技大学电子工程学院,7.1.2 建立二维字符阵列 在建立二维阵列时,应注意确保每行上的字符数相等,如果长度不等,应在其后补空格。例如输入 str1=MATLAB ;SIMULINK str1= MATLAB SIMULINK,必要时可利用blanks函数补上空格,例如输入 book1=MATLAB Programming Language; book2=Signal Processing using MATLAB; book3=Control System

5、 using MATLAB; book4=Neural Network using MATLAB; disp(length(book1),length(book2),length(book3),length(book4) 27 30 27 27 BOOK=book1 blanks(3);book2;book3 blanks(3);book4 blanks(3) BOOK = MATLAB Programming Language Signal Processing using MATLAB Control System using MATLAB Neural Network using MAT

6、LAB,当从字符阵列中提取字符串时,可利用deblank函数删除字符串末尾多余的空格 str2=BOOK(1,:);length(str2) ans = 30 str3=deblank(str2);length(str3) ans = 27 这说明在str3中已删除了末尾的空格。,7.2 字符串单元阵列,建立字符串单元阵列存储字符串,比字符阵列更方便、更灵活。MATLAB专门为处理字符串单元阵列提供了函数,如cellstr,findstr等。 利用cellstr函数可方便地将字符阵列变换成字符串单元阵列。例如,在上面已得到BOOK字符阵列后,输入, BOOKcell=cellstr(BOOK)

7、 BOOKcell = MATLAB Programming Language Signal Processing using MATLAB Control System using MATLAB Neural Network using MATLAB,建立了字符单元阵列BOOKcell,这时每个元素均为字符串,而且已删除了末尾的空格,这可通过length函数求取其长度来证实。 length(BOOKcell1) ans= 27,相反,利用char函数可将字符单元阵列变换成字符阵列, 而且能够自动在阵列元素中加上适当的空格,以便使每行的长度相等。 BOOK1=char(BOOKcell) BO

8、OK1 = MATLAB Programming Language Signal Processing using MATLAB Control System using MATLAB Neural Network using MATLAB,7.3 字 符 串 比 较,比较字符串可有以下几种方式: 比较两个字符串或其部分是否相同。 比较两个字符串中的个别字符是否相同。 可对字符串中的每个元素进行归类,如根据是字母还是非字母进行归类。 MATLAB为这些任务提供了一些专用的函数,如strcmp、strcmpi、strncmp、strncmpi和findstr等,它们既适用于字符阵列,也适用于字符

9、单元阵列。,7.3.1 比较字符串是否相同 strcmp函数用于比较两字符串是否相同,strcmpi函数则在比较时忽略其大、小写,即ABC等同于abc;strncmp函数用来比较两字符串的前n个字符是否相同,同样strncmpi比较时忽略大、小写。例如,在MATLAB中输入, str1=hello; str2=help!; str3=Hello; k1=strcmp(str1,str2) k1 = 0 k2=strcmp(str1,str3) k2 = 0 k3=strcmpi(str1,str3) k3 = 1 k4=strncmp(str1,str2,3) k4 = 1,7.3.2 比较字

10、符是否相同 当要比较两个字符串中个别字符是否相同时,可采用MATLAB的关系操作符。例如: str1=hello; str2=help!; k=str1= =str2 k = 1 1 1 0 0,实际上,还可以采用其它的关系操作符(、=、!=),这样就可以比较两个字符串的大小关系,当然实际确定其大小关系时采用的是其ASCII码。例如:, A=abcd; B=aabe; k1=AB k1 = 0 1 1 0 k2=A=B k2 = 1 1 1 0 k3=AB k3 = 0 0 0 1,7.3.3 英文字母的检测 在实际应用中,经常需要检测字符串是否有英文字母,或者检测是否全部由字母构成,MATL

11、AB专门为此提供了函数isletter。有时也需要检测字符串是否有空格,可采用isspace函数。例如: myaddr=XiDian 134; letter=isletter(myaddr) letter = 1 1 1 1 1 1 0 0 0 0 space=isspace(myaddr) space = 0 0 0 0 0 0 1 0 0 0,联合isletter和isspace这两个函数,可检测字符串是否全部由字母和空格构成。例如: str1=I wish this book can be beneficial to you; let1=isletter(str1); let2=issp

12、ace(str1); let3=let1| let2; if all(let3) disp(所有字符均为英文字母或空格) else disp(字符中包含非英文字母和空格) end,执行后得 所有字符均为英文字母或空格 如果输入改为 str1=My post address is XiDian Box 134; 则执行后得 字符中包含非英文字母和空格,7.4 字符串搜索与取代,MATLAB为字符串的搜索与取代提供了几个函数findstr、strmatch、strrep、strtok等,这几个函数的灵活运用,可完成比较复杂的任务。例如:, str=Example 12 made on 08/18/

13、05; k=findstr(str,08) k = 20 str1=strrep(str,18,19) str1 = Example 12 made on 08/19/05,这里将str中的日期修改为2005年08月19日。,利用strtok函数可找出字符串的首部(第一个分隔符之前的字符串): str2=strtok(str1) str2= Example,利用strtok函数还可以完成从英文句子中提取单词,为此编写函数来实现: function allwords=words(sentence) r=sentence allwords=; while(any(r) w,r=strtok(r);

14、 allwords=strvcat(allwords,w); end,这时输入 str1=I wish this book can be benefical to you; str1words=words(str1) str1words= I wish this book can be beneficial to you,7.5 字符串与数值之间的变换,MATLAB提供了一组函数可用来在各种数制之间进行变换。例如: x=53176251; y=int2str(x) y = 53176251 whos Name Size Bytes Class x 1x1 8 double array y 1x

15、8 16 char array Grand total is 9 elements using 24 bytes,从这可以看出,x只占用一个存储单元(8个字节),而当它变换成字符时占用了8个字符单元(每个单元占用2个字节)。在将数值表示成字符串时还可以指定位数,如, p=num2str(pi,8) p = 3.1415927 d1=bin2dec(10101) d1 = 21 b1=dec2bin(d1,8) b1 = 00010101 d2=hex2dec(A1B) d2 =,2587 h2=dec2hex(d2,4) h2 = 0A1B d3=base2dec(12210,3) d3 = 156 t3=dec2base(d3,3) t3 = 12210,其中,最后一组完成在三进制数与十进制数之间进行转换。,只有利用num2str函数才能将含小数的数值变换成字符串,从而可以在图形标题或标记中使用与数据相关的数值。例如,假设已利用plot(x,y)绘制出图形,则可给x轴加上这样的标记:,str1=num2str(min(x); str2=num2str(max(x); str=Vaue of x is from,str1,to,str2; xlabel(str) 利用

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号