matlab程序语言设计第7章.ppt
《matlab程序语言设计第7章.ppt》由会员分享,可在线阅读,更多相关《matlab程序语言设计第7章.ppt(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=
2、char 第七章 字符串处理 这说明变量name的类型为字符型,再输入size(name)ans=1 14这说明name占用114向量,从这可以看出每个汉字只占用一个字符位置。众所周知,一个汉字需要用两个字节的内码表示,每个字符应该占用两个字节,这一点可由下列命令得到证实:第七章 字符串处理 name1=MATLAB;whos Name Size Bytes Class ans 1x4 8 char array name 1x14 28 char array name1 1x6 12 char arrayGrand total is 24 elements using 48 bytes 变量n
3、ame含有14个汉字,占用了28个字节,然而,name1包含有6个英文字母,占用12个字节,这说明每个字符都采用16位的ASCII码存储。第七章 字符串处理 7.1.1 字符与字符与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 第七章 字
4、符串处理 52983 45234 46567 55251 49094 48316 46323 53671Columns 9 through 14 46567 55251 47524 46028 53671 54458 aname1=char(a1)aname1=MATLAB aname=char(a)aname=西安电子科技大学电子工程学院 第七章 字符串处理 7.1.2 建立二维字符阵列建立二维字符阵列在建立二维阵列时,应注意确保每行上的字符数相等,如果长度不等,应在其后补空格。例如输入 str1=MATLAB ;SIMULINKstr1=MATLAB SIMULINK 第七章 字符串处理
5、必要时可利用blanks函数补上空格,例如输入book1=MATLAB Programming Language;book2=Signal Processing using MATLAB;book3=Control System 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=MAT
6、LAB Programming Language Signal Processing using MATLABControl System using MATLAB Neural Network using MATLAB 第七章 字符串处理 当从字符阵列中提取字符串时,可利用deblank函数删除字符串末尾多余的空格 str2=BOOK(1,:);length(str2)ans=30 str3=deblank(str2);length(str3)ans=27这说明在str3中已删除了末尾的空格。第七章 字符串处理 7.2 字符串单元阵列字符串单元阵列 建立字符串单元阵列存储字符串,比字符阵列更
7、方便、更灵活。MATLAB专门为处理字符串单元阵列提供了函数,如cellstr,findstr等。利用cellstr函数可方便地将字符阵列变换成字符串单元阵列。例如,在上面已得到BOOK字符阵列后,输入 第七章 字符串处理 BOOKcell=cellstr(BOOK)BOOKcell=MATLAB Programming Language Signal Processing using MATLAB Control System using MATLAB Neural Network using MATLAB 建立了字符单元阵列BOOKcell,这时每个元素均为字符串,而且已删除了末尾的空格,
8、这可通过length函数求取其长度来证实。length(BOOKcell1)ans=27 第七章 字符串处理 相反,利用char函数可将字符单元阵列变换成字符阵列,而且能够自动在阵列元素中加上适当的空格,以便使每行的长度相等。BOOK1=char(BOOKcell)BOOK1=MATLAB Programming Language Signal Processing using MATLABControl System using MATLAB Neural Network using MATLAB 第七章 字符串处理 7.3 字字符符串串比比较较 比较字符串可有以下几种方式:比较两个字符串或
9、其部分是否相同。比较两个字符串中的个别字符是否相同。可对字符串中的每个元素进行归类,如根据是字母还是非字母进行归类。MATLAB为这些任务提供了一些专用的函数,如strcmp、strcmpi、strncmp、strncmpi和findstr等,它们既适用于字符阵列,也适用于字符单元阵列。第七章 字符串处理 7.3.1 比较字符串是否相同比较字符串是否相同strcmp函数用于比较两字符串是否相同,strcmpi函数则在比较时忽略其大、小写,即ABC等同于abc;strncmp函数用来比较两字符串的前n个字符是否相同,同样strncmpi比较时忽略大、小写。例如,在MATLAB中输入 第七章 字符
10、串处理 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 比较字符是否相同比较字符是否相同 当要比较两个字符串中个别字符是否相同时,可采用MATLAB的关系操作符。例如:str1=hello;str2=help!;k=str1=str2k=1 1 1 0 0 第七章 字符串处理 实际上,还可以采用其它的关系操作符(、=、!=),这样就可以比较
11、两个字符串的大小关系,当然实际确定其大小关系时采用的是其ASCII码。例如:A=abcd;B=aabe;k1=ABk1=0 1 1 0 k2=A=Bk2=1 1 1 0 k3=A 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
12、 to you;let1=isletter(str1);let2=isspace(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等,这几
13、个函数的灵活运用,可完成比较复杂的任务。例如:str=Example 12 made on 08/18/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(
14、sentence)r=sentenceallwords=;while(any(r)w,r=strtok(r);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
15、;y=int2str(x)y=53176251 whos Name Size Bytes Class x 1x1 8 double array y 1x8 16 char arrayGrand 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=h
16、ex2dec(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 fr
17、om,str1,to,str2;xlabel(str)利用mat2str函数可将矩阵变换成字符串形式。例如:A=round(100*rand(3,3)-50)/100A=0.4500 -0.0100 -0.0400 -0.2700 0.3900 -0.4800 0.1100 0.2600 0.3200 B=mat2str(A)B=0.45-0.01-0.04;-0.27 0.39-0.48;0.11 0.26 0.32 第七章 字符串处理 7.6 综合设计示例综合设计示例 为说明字符串的应用,设计MATLAB程序对保存在文件中的文本进行处理,要求:(1)统计文件中字符串error出现的次数。(
18、2)将文件中的字符串error修改成Error。(3)统计文件中字符(a,b,t)出现的次数及频度。(4)统计文件中单词(the,and)出现的次数。第七章 字符串处理 这里假设要处理的文件为bugs.txt,其内容为 LaTeX Error Reports 12 January 1999ERROR REPORTSBefore you report an error please check that:*Your LaTeX system is not more than one year old.New LaTeX releases occur at 6 monthly intervals,
19、thus your problem may have already been fixed.*The error is not already fixed by a patch added recently to the current distribution.If you have access to a CTAN archive then you can easily check whether there is already a patch that fixes your problem;so please do so.The patches are described in the
20、 第七章 字符串处理 files patches.txt and ltpatch.ltx;these are in the current distribution.This check is especially important if you are using a distribution that is more than one month old.*The error is not already mentioned in the documentation of the distribution,e.g.in a.dtx file(in this case it is a fe
21、ature:-).*The error has not already been reported.If you have WWW access,you can search the LaTeX bugs database using this URL:http:/www.latex-project.org/bugs.html*The error is not caused by software other than the core LaTeX software that is produced and maintained by the LaTeX3 project team(pleas
22、e report problems with other software to the authors or suppliers of that software).第七章 字符串处理*The error is not caused by using an obsolete version of any file or of other software.*You are using the original version of all files,not one that has been modified elsewhere.If you think you have found a
23、genuine bug in a recent version of thecore LaTeX software,please report it in the following way:*Prepare a*short*test file that clearly demonstrates your problem;see below for a discussion of short.*Run this file through latex to obtain the transcript file (often.log)since you will need to submit th
24、is file also.*Generate a bug report template by running the file latexbug.tex through LaTeX.第七章 字符串处理 *Fill in the spaces in the generated template file.Please note that the reporting language is*English*irregardless of the fact,that the address you are sending the bug report to,might not be in an E
25、nglish speaking country.Reports received in a language other than English might not be understandable for the person currently looking at bug reports!*Include all necessary information,especially a complete input file,a complete transcript file,and all other files used(if they are not standard).第七章
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 程序语言 设计
限制150内