




已阅读5页,还剩120页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章字符串处理,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=114这说明name占用114向量,从这可以看出每个汉字只占用一个字符位置。众所周知,一个汉字需要用两个字节的内码表示,每个字符应该占用两个字节,这一点可由下列命令得到证实:,name1=MATLAB;whosNameSizeBytesClassans1x48chararrayname1x1428chararrayname11x612chararrayGrandtotalis24elementsusing48bytes,变量name含有14个汉字,占用了28个字节,然而,name1包含有6个英文字母,占用12个字节,这说明每个字符都采用16位的ASCII码存储。,7.1.1字符与ASCII码之间的变换在MATLAB中,每个字符按16位的ASCII码存储,这大大方便了在MATLAB中使用双字节内码字符集,如汉字系统。利用double和char函数可在字符与其ASCII码之间进行转换。例如,在得到上述name和name1后输入,a1=double(name1)a1=776584766566a=double(name)a=Columns1through8,5298345234465675525149094483164632353671Columns9through14465675525147524460285367154458aname1=char(a1)aname1=MATLABaname=char(a)aname=中南民族大学计科院自动化专业,7.1.2建立二维字符阵列在建立二维阵列时,应注意确保每行上的字符数相等,如果长度不等,应在其后补空格。例如输入str1=MATLAB;SIMULINKstr1=MATLABSIMULINK,必要时可利用blanks函数补上空格,例如输入book1=MATLABProgrammingLanguage;book2=SignalProcessingusingMATLAB;book3=ControlSystemusingMATLAB;book4=NeuralNetworkusingMATLAB;disp(length(book1),length(book2),length(book3),length(book4)27302727BOOK=book1blanks(3);book2;book3blanks(3);book4blanks(3)BOOK=MATLABProgrammingLanguageSignalProcessingusingMATLABControlSystemusingMATLABNeuralNetworkusingMATLAB,当从字符阵列中提取字符串时,可利用deblank函数删除字符串末尾多余的空格str2=BOOK(1,:);length(str2)ans=30str3=deblank(str2);length(str3)ans=27这说明在str3中已删除了末尾的空格。,7.2字符串单元阵列,建立字符串单元阵列存储字符串,比字符阵列更方便、更灵活。MATLAB专门为处理字符串单元阵列提供了函数,如cellstr,findstr等。利用cellstr函数可方便地将字符阵列变换成字符串单元阵列。例如,在上面已得到BOOK字符阵列后,输入,BOOKcell=cellstr(BOOK)BOOKcell=MATLABProgrammingLanguageSignalProcessingusingMATLABControlSystemusingMATLABNeuralNetworkusingMATLAB,建立了字符单元阵列BOOKcell,这时每个元素均为字符串,而且已删除了末尾的空格,这可通过length函数求取其长度来证实。length(BOOKcell1)ans=27,相反,利用char函数可将字符单元阵列变换成字符阵列,而且能够自动在阵列元素中加上适当的空格,以便使每行的长度相等。BOOK1=char(BOOKcell)BOOK1=MATLABProgrammingLanguageSignalProcessingusingMATLABControlSystemusingMATLABNeuralNetworkusingMATLAB,7.3字符串比较,比较字符串可有以下几种方式:比较两个字符串或其部分是否相同。比较两个字符串中的个别字符是否相同。可对字符串中的每个元素进行归类,如根据是字母还是非字母进行归类。MATLAB为这些任务提供了一些专用的函数,如strcmp、strcmpi、strncmp、strncmpi和findstr等,它们既适用于字符阵列,也适用于字符单元阵列。,7.3.1比较字符串是否相同strcmp函数用于比较两字符串是否相同,strcmpi函数则在比较时忽略其大、小写,即ABC等同于abc;strncmp函数用来比较两字符串的前n个字符是否相同,同样strncmpi比较时忽略大、小写。例如,在MATLAB中输入,str1=hello;str2=help!;str3=Hello;k1=strcmp(str1,str2)k1=0k2=strcmp(str1,str3)k2=0k3=strcmpi(str1,str3)k3=1k4=strncmp(str1,str2,3)k4=1,7.3.2比较字符是否相同当要比较两个字符串中个别字符是否相同时,可采用MATLAB的关系操作符。例如:str1=hello;str2=help!;k=str1=str2k=11100,实际上,还可以采用其它的关系操作符(、=、!=),这样就可以比较两个字符串的大小关系,当然实际确定其大小关系时采用的是其ASCII码。例如:,A=abcd;B=aabe;k1=ABk1=0110k2=A=Bk2=1110k3=Amyaddr=XiDian134;letter=isletter(myaddr)letter=1111110000space=isspace(myaddr)space=0000001000,联合isletter和isspace这两个函数,可检测字符串是否全部由字母和空格构成。例如:str1=Iwishthisbookcanbebeneficialtoyou;let1=isletter(str1);let2=isspace(str1);let3=let1|let2;ifall(let3)disp(所有字符均为英文字母或空格)elsedisp(字符中包含非英文字母和空格)end,执行后得所有字符均为英文字母或空格如果输入改为str1=MypostaddressisXiDianBox134;则执行后得字符中包含非英文字母和空格,7.4字符串搜索与取代,MATLAB为字符串的搜索与取代提供了几个函数findstr、strmatch、strrep、strtok等,这几个函数的灵活运用,可完成比较复杂的任务。例如:,str=Example12madeon08/18/05;k=findstr(str,08)k=20str1=strrep(str,18,19)str1=Example12madeon08/19/05,这里将str中的日期修改为2005年08月19日。,利用strtok函数可找出字符串的首部(第一个分隔符之前的字符串):str2=strtok(str1)str2=Example,利用strtok函数还可以完成从英文句子中提取单词,为此编写函数来实现:functionallwords=words(sentence)r=sentenceallwords=;while(any(r)w,r=strtok(r);allwords=strvcat(allwords,w);end,这时输入str1=Iwishthisbookcanbebeneficaltoyou;str1words=words(str1)str1words=Iwishthisbookcanbebeneficialtoyou,7.5字符串与数值之间的变换,MATLAB提供了一组函数可用来在各种数制之间进行变换。例如:x=53176251;y=int2str(x)y=53176251whosNameSizeBytesClassx1x18doublearrayy1x816chararrayGrandtotalis9elementsusing24bytes,从这可以看出,x只占用一个存储单元(8个字节),而当它变换成字符时占用了8个字符单元(每个单元占用2个字节)。在将数值表示成字符串时还可以指定位数,如,p=num2str(pi,8)p=3.1415927d1=bin2dec(10101)d1=21b1=dec2bin(d1,8)b1=00010101d2=hex2dec(A1B)d2=,2587h2=dec2hex(d2,4)h2=0A1Bd3=base2dec(12210,3)d3=156t3=dec2base(d3,3)t3=12210,其中,最后一组完成在三进制数与十进制数之间进行转换。,只有利用num2str函数才能将含小数的数值变换成字符串,从而可以在图形标题或标记中使用与数据相关的数值。例如,假设已利用plot(x,y)绘制出图形,则可给x轴加上这样的标记:,str1=num2str(min(x);str2=num2str(max(x);str=Vaueofxisfrom,str1,to,str2;xlabel(str)利用mat2str函数可将矩阵变换成字符串形式。例如:A=round(100*rand(3,3)-50)/100A=0.4500-0.0100-0.0400-0.27000.3900-0.48000.11000.26000.3200B=mat2str(A)B=0.45-0.01-0.04;-0.270.39-0.48;0.110.260.32,7.6综合设计示例,为说明字符串的应用,设计MATLAB程序对保存在文件中的文本进行处理,要求:(1)统计文件中字符串error出现的次数。(2)将文件中的字符串error修改成Error。(3)统计文件中字符(a,b,t)出现的次数及频度。(4)统计文件中单词(the,and)出现的次数。,这里假设要处理的文件为bugs.txt,其内容为LaTeXErrorReports12January1999ERRORREPORTSBeforeyoureportanerrorpleasecheckthat:*YourLaTeXsystemisnotmorethanoneyearold.NewLaTeXreleasesoccurat6monthlyintervals,thusyourproblemmayhavealreadybeenfixed.*Theerrorisnotalreadyfixedbyapatchaddedrecentlytothecurrentdistribution.IfyouhaveaccesstoaCTANarchivethenyoucaneasilycheckwhetherthereisalreadyapatchthatfixesyourproblem;sopleasedoso.Thepatchesaredescribedinthe,filespatches.txtandltpatch.ltx;theseareinthecurrentdistribution.Thischeckisespeciallyimportantifyouareusingadistributionthatismorethanonemonthold.*Theerrorisnotalreadymentionedinthedocumentationofthedistribution,e.g.ina.dtxfile(inthiscaseitisafeature:-).*Theerrorhasnotalreadybeenreported.IfyouhaveWWWaccess,youcansearchtheLaTeXbugsdatabaseusingthisURL:/bugs.html*TheerrorisnotcausedbysoftwareotherthanthecoreLaTeXsoftwarethatisproducedandmaintainedbytheLaTeX3projectteam(pleasereportproblemswithothersoftwaretotheauthorsorsuppliersofthatsoftware).,*Theerrorisnotcausedbyusinganobsoleteversionofanyfileorofothersoftware.*Youareusingtheoriginalversionofallfiles,notonethathasbeenmodifiedelsewhere.IfyouthinkyouhavefoundagenuinebuginarecentversionofthecoreLaTeXsoftware,pleasereportitinthefollowingway:*Preparea*short*testfilethatclearlydemonstratesyourproblem;seebelowforadiscussionofshort.*Runthisfilethroughlatextoobtainthetranscriptfile(often.log)sinceyouwillneedtosubmitthisfilealso.*Generateabugreporttemplatebyrunningthefilelatexbug.texthroughLaTeX.,*Fillinthespacesinthegeneratedtemplatefile.Pleasenotethatthereportinglanguageis*English*irregardlessofthefact,thattheaddressyouaresendingthebugreportto,mightnotbeinanEnglishspeakingcountry.ReportsreceivedinalanguageotherthanEnglishmightnotbeunderstandableforthepersoncurrentlylookingatbugreports!*Includeallnecessaryinformation,especiallyacompleteinputfile,acompletetranscriptfile,andallotherfilesused(iftheyarenotstandard).,步骤1:读取文件,建立字符串。为处理文件中的字符串,先打开文件,读取文件,存入字符串变量。这里要用到有关文件的输入/输出函数,本书未对此进行讨论,因此,有必要对文件的输入/输出函数作一简要介绍,详见MATLAB的在线帮助。(1)fid=fopen(filename,permission)可打开指定的文件filename,其中permission用于指定允许的操作方式,当permission取r、w、r+或w+、a时,分别表示可对文件进行读、写、读写、在文件尾写的操作,fid为代表这一文件的文件标识符。,(2)A,count=fread(fid,size,precision)可对已打开的文件fid进行读操作,其中size表示一次读取的字符数,当size取Inf时,表示读至文件尾。precision表示读取的字符的精度,当取char、uchar、schar时,表示读取字符、无符号字符、有符号字符;当取int8、int16、int32、int64时,表示读取整数(8、16、32、64位);当取uint8、uint16、uint32、uint64时,表示读取无符号整数;当取float32、float64时,表示读取浮点数(32、64位)等。A为读取的内容,count记录所读取的长度。(3)count=fwrite(fid,A,precision)可将数据A按指定的格式写入文件fid,输出变量count记录所写入的长度。,(4)status=fclose(fid)可关闭指定的文件fid,status记录关闭文件操作的状态,关闭成功时status=0,否则status=-1;status=fclose(all)表示关闭已打开的所有文件。有了这些函数,可以编写出读取文件字符的函数readfile:functiony,count=readfile(filename)fid=fopen(filename);y,count=fread(fid,Inf,char);fclose(fid);这样可方便地读入文件,并建立字符阵列:yi,ct=readfile(bugs.txt);y=char(yi),步骤2:统计error出现的次数。这只需要直接应用findstr函数找出字符串error在y中的位置,然后求出位置的个数。k=findstr(y,error);L1=length(k);disp(字符串error出现的次数为,num2str(L1)执行后得字符串error出现的次数为6,步骤3:将error修改成Error。这只需要直接应用strrep函数,在字符串y中将error修改成Error,替换结果只显示出第一段。y1=strrep(y,error,Error);disp(error修改成Error后的结果:)disp(char(y1(1:322),执行后得error修改成Error后的结果:LaTeXErrorReports12January1999ERRORREPORTSBeforeyoureportanErrorpleasecheckthat:*YourLaTeXsystemisnotmorethanoneyearold.NewLaTeXreleasesoccurat6monthlyintervals,thusyourproblemmayhavealreadybeenfixed.,步骤4:统计字符(a,b,t)出现的次数及频度。为统计字符出现的次数,先编写出函数countchar,其中使用了关系操作符:functiony=countchar(str,c)统计字符出现的次数k=upper(str)=upper(c);y=sum(k);,还应注意,适当处理大、小写英文字母,这里先将字符都变换成大写字母,然后进行比较,这也说明countchar函数只适用于统计英文字母出现的次数,有了这个函数后可很容易地求出字符(a,b,t)出现的次数及频度。,c1=countchar(y,a);c2=countchar(y,b);c3=countchar(y,t);disp(字符a,b,t出现的次数分别为,num2str(c1,c2,c3)cc=round(1000*c1/ct,c2/ct,c3/ct)/100;disp(字符a,b,t出现的频度分别为百分之,num2str(cc,-5.2g)执行后得字符a,b,t出现的次数分别为14633192字符a,b,t出现的频度分别为百分之0.570.130.75,步骤5:统计单词(the,and)出现的次数。同样,为统计单词出现的次数,先编写出函数countword,这里先将字符都变换成大写字母,然后利用7.4节设计的单词提取函数words对字符串y进行处理,最后利用strmatch函数查找严格匹配的子字符串:,functiony=countword(str,w)统计单词出现的次数str1=upper(str);w1=upper(w);str2=words(str1);k=strmatch(w1,str2,match);y=length(k);,有了这个函数后可以很容易地求出单词出现的次数:w1=countword(y,the);w2=countword(y,and);disp(单词the,and出现的次数分别为,num2str(w1,w2)执行后得单词the,and出现的次数分别为273,最后我们给出整个MATLAB程序:clear读取文件,建立字符串yi,ct=readfile(bugs.txt);y=char(yi);统计error出现的次数k=findstr(y,error);L1=length(k);disp(字符串error出现的次数为,num2str(L1)将error修改成Errory1=strrep(y,error,Error);disp(error修改成Error后的结果:),disp(char(y1(1:322)统计字符出现的次数(a,b,t)及频度c1=countchar(y,a);c2=countchar(y,b);c3=countchar(y,t);disp(字符a,b,t出现的次数分别为,num2str(c1,c2,c3)cc=round(1000*c1/ct,c2/ct,c3/ct)/100;disp(字符a,b,t出现的频度分别为百分之,num2str(cc,-5.2g)统计单词出现的次数(the,and)w1=countword(y,the);w2=countword(y,and);disp(单词the,and出现的次数分别为,num2str(w1,w2),7.7字符串函数,表7.1字符串函数,7.7.1一般函数1char功能:建立字符阵列。格式:S=char(X)S=char(C)S=cahr(t1,t2,t3,),说明:S=char(X)可将X中以字符ASCII码表示的值转换成相应的字符,利用double函数可作相反的变换。在S=char(C)中,C表示字符串的单元阵列,这条命令可将单元阵列中的字符串变换成字符阵列S,利用cellstr可作相反的变换。在S=char(t1,t2,t3,)中,t1,t2,t3,为字符串的行阵列,则S是以t1,t2,t3,为行构成的二维字符矩阵,其行尺寸取t1,t2,t3,中的最长者,其它字符行阵列在末尾补空格,使所有行阵列等长,从而构成二维字符矩阵S。,例如,分三行打印出其ASCII为32127之间的字符,可输入s=char(reshape(32:127,32,3)s=!#$%?ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz|,2double功能:将字符阵列变换成双精度数值。格式:Y=double(X)说明:Y=double(X)可将字符阵列X转换成其ASCII码,如果X本身已经是双精度数值,则double函数不起作用。例如:,s=ABC;y=double(s)y=656667z=double(y)z=656667,3.cellstr功能:从字符阵列中建立单元阵列。格式:C=cellstr(s)说明:(参见6.5节。),4blanks功能:建立空格字符串。格式:s=blanks(n)说明:s=blanks(n)可产生n个空格。例如:disp(XXXblanks(5)yyy)则可在XXX与yyy之间加上5个空格。,5deblank功能:删除字符串末尾的空格。格式:str=deblank(str)c=deblank(c)说明:str=deblank(str)可删去字符串str中末尾的空格;在c=deblank(c)中,c为字符串的单元阵列,可将deblank函数应用于c中的每个元素。例如:,A1,1=MATLAB;A1,2=SIMULINK;A2,1=Toolboxes;A2,2=TheMathWorksA=MATLABSIMULINKToolboxesTheMathWorksB=deblank(A)B=MATLABSIMULINKToolboxesTheMathWorks,6.eval功能:计算以字符串表示的MATLAB表达式。格式:a=eval(expresssion)a1,a2,a3,=eval(function(b1,b2,b3,)说明:a=eval(expression)可计算出MATLAB表达式expression的值,expression=string1,int2str(var),string2,;在a1,a2,a3,=eval(function(b1,b2,b3,)中,b1,b2,b3,为函数function的输入变量,计算结果保存在a1,a2,a3,中。例如,输入,A=4*5-3;eval(A)ans=17e,v=eval(eig(24;-65)e=0.1936-0.6021i0.1936+0.6021i0.77460.7746v=3.5000+4.6637i003.5000-4.6637iP=pwd;eval(P)ans=C:ProgramFilesMATLAB704work,这时可得到程序pwd.m所在的位置。输入D=odedemo;quaddemo;zerodemo;fitdemo;n=input(Selectademonumber:);eval(D(n,:)则可选择执行不同的演示程序。,7.7.2字符串测试1ischar功能:检测到字符阵列(字符串)时为逻辑真。格式:k=ischar(s)说明:在k=ischar(s)中,当s为字符阵列或字符串时,k为逻辑真(其值为1),否则k为0。,2iscellstr功能:检测到字符串的单元阵列时为逻辑真。格式:k=iscellstr(s)说明:在k=iscellstr(s)中,当s为字符串的单元阵列时,k为逻辑真(其值为1),否则k为0。,3isletter功能:检测到英文字母时为逻辑真。格式:TF=isletter(str)说明:在TF=isletter(str)中,当str中某一位为英文字母时,对应的TF中的单元为逻辑真,否则为逻辑假。例如:str=MAXis1200;TF=isletter(str)TF=11101100000,4isspace功能:检测到空格时为逻辑真。格式:TF=isspace(str),说明:在TF=isspace(str)中,当str中某一位为空白(即空格、换行、回车、制表符Tab、垂直制表符、打印机走纸符)时,相应的TF中的单元为逻辑真,否则为逻辑假。例如:str=MAXis1200;TF=isspace(str)TF=00010010000,7.7.3字符串操作1strcat功能:字符串连接。格式:t=strcat(s1,s2,s3,)说明:t=strcat(s1,s2,s3,)可按水平方向连接字符串s1,s2,s3,并忽略尾部添加的空格。所有的输入s1,s2,s3,必须具有相同的行数。当输入全为字符阵列时,t也为字符阵;当输入中包含有字符串的单元阵列时,则t为单元阵列。例如:,a=Hello;b=howareyou!;c=strcat(a,b)c=Hellohowareyou!d=abd=Hellohowareyou!,2strvcat功能:字符串的垂直连接。格式:t=strvcat(s1,s2,s3,)说明:strvcat与strcat函数类似,只是按垂直方向连接字符串s1,s2,s3,即以s1,s2,s3,作为t的行,为此会自动在s1,s2,s3,的尾部补空格以形成字符串矩阵。例如:,s1=first;s2=string;s3=matrix;s4=second;t1=strvcat(s1,s2,s3)t1=firststringmatrixt2=strvcat(s4,s2,s3)t2=secondstringmatrix,3strcmp功能:比较字符串。格式:k=strcmp(str1,str2)TF=strcmp(S,T)说明:k=strcmp(str1,str2)可对两个字符串str1和str2进行比较,如果两者相同,则返回逻辑真(其值为1),否则返回逻辑假(0);在TF=strcmp(S,T)中,S、T为字符串单元阵列,TF与S、T尺寸相同,且当相应T、S元素相同时其值为1,否则为0。注意T、S必须具有相同的尺寸,或者其中之一为标量。例如:,strcmp(Yes,No)ans=0strcmp(Yes,Yes)ans=1A=MATLABSIMULINK;ToolboxesTheMathWorksA=MATLABSIMULINKToolboxesTheMathWorksB=HandleGraphicsRealTimeWorkshop;ToolboxesTheMathWorks,B=HandleGraphicsRealTimeWorkshopToolboxesTheMathWorksC=SignalProcessingImageProcessing;MATLABSIMULINKC=SignalProcessingImageProcessingMATLABSIMULINKstrcmp(A,B)ans=0011strcmp(A,C)ans=0000,4strcmpi功能:比较字符串(忽略大、小写)。格式:k=strcmpi(str1,str2)TF=strcmpi(S,T)说明:strcmpi与strcmp函数类似,只是在比较时忽略字符的大、小写,有关说明参见strcmp函数。例如:,s1=matrix;s2=Matrix;strcmpi(s1,s2)ans=1strcmp(s1,s2)ans=0,5strncmp功能:比较两个字符串的前n个字符。格式:k=strncmp(str1,str2,n)TF=strncmp(S,T,n)说明:strncmp函数与strcmp函数类似,只是strncmp函数根据字符串的前n个字符产生结果,说明部分可参见strcmp函数。例如:,s1=MATLABexpression;s2=MATLABvariable;k1=strncmp(s1,s2,6)k1=1k2=strcmp(s1,s2)k2=0,6strncmpi功能:比较两个字符串的前n个字符(忽略大、小写)。格式:k=strncmpi(str1,str2,n)TF=strncmpi(S,T,n),说明:strncmpi与strncmp函数类似,只是strncmpi在比较字符串的前n个字符时,忽略其大、小写,这里不再赘述。例如:s1=MATLABexpression;s2=matlabvariable;k1=strncmpi(s1,s2,6)k1=1k2=strncmp(s1,s2,6)k2=0,7findstr功能:在字符串中查找子字符串。格式:k=strfind(str,pattern)k=strfind(cellstr,pattern)k=findstr(str1,str2),说明:k=strfind(str,pattern)可在字符串str中找出字符串pattern所在的位置,如果在str中包含有多个pattern字符串,则得到一个行向量,分别给出其位置。k=strfind(cellstr,pattern)可以在单元阵列cellstr中搜索字符子串pattern。例如:str1=MATLABisahigh-performancelanguagefortechnicalcomputing.;str2=language;k=findstr(str1,str2)k=30,8strjust功能:调整字符阵列。格式:t=strjust(s)t=strjust(s,left)t=strjust(s,right)t=strjust(s,center),说明:t=strjust(s)或t=strjust(s,right)可对字符阵列s中的每行字符按右对齐排列;t=strjust(s,left)则可按左对齐排列;t=strjust(s,center)可按居中对齐排列。例如输入,s=MATLAB;SIMULINKs=MATLABSIMULINKt=strjust(s,right)t=MATLABSIMULINK,9strmatch功能:查找匹配字符串。格式:k=strmatch(str,STR)k=strmatch(str,STR,exact)说明:k=strmatch(str,STR)可在STR字符串中找出以str开头的字符串位置;k=strmatch(str,STR,exact)可找出严格以str开头的字符串的位置。例如:,k1=strmatch(max,strvcat(max,minimax,maximum)k1=13k2=strmatch(max,strvcat(max,minimax,maximum),exact)k2=1,10strrep功能:字符串的搜索与取代。格式:str=strrep(str1,str2,str3)说明:str=strrep(str1,str2,str3)可在字符串str1中找出子字符串str2,并以str3取代。例如:,s1=Thisisagoodexample.;str=strrep(s1,good,great)str=Thisisagreatexample.,A=MATLAB,SIMULINKToolboxes,TheMathWorks;B=HandleGraphics,RealTimeWorkshopToolboxes,TheMathWorks;C=SignalProcessing,ImageProcessingMATLAB,SIMULINK;strrep(A,B,C)ans=MATLABSIMULINKMATLABSIMULINK,11strtok功能:找出字符串的首部。格式:token=strtok(str)token=strtok(str,delimiter)token,rem=strtok(),说明:token=strtok(str,delimiter)可找出字符串str的首部,即位于第一个分隔符之前的一串字符,其中向量delimiter用于指定有效的分隔符。token=strtok(str)可以指定采用缺省的分隔符,即空格(ASCII码为32)、Tabs(ASCII码为9)和回车(ASCII码为13)。token,rem=strtok()除得到字符串的首部token外,还得到了剩余字符串rem。,s=Thisisagoodexample.;token,rem=strtok(s)token=Thisrem=isagoodexample.,例如:,12upper功能:将字符串变换为大写。格式:t=upper(str)B=upper(A)说明:t=upper(str)可将str中的小写字母变换成大写字母,其它字符不变。B=upper(A)可将字符串单元阵列A中的小写字母变换成大写字母。例如:upper(MatlabV7.0)ans=MATLABV7.0,13lower功能:将字符串变换为小写。格式:t=lower(str)B=lower(A)说明:t=lower(str)可将str中的大写字母变换为小写字母,其它字符不变。B=lower(A)可将字符串单元阵列A中的大写字母变换成小写字母。例如:lower(MatlabV7.0)ans=matlabv7.0,7.7.4字符串与数值之间的变换1num2str功能:将数值变换成字符串。格式:str=num2str(A)str=num2str(A,precision)str=num2str(A,format),说明:num2str函数可将数值变换成字符串表示,利用这种函数可方便地在图形标记和标题中使用数值。str=num2str(A)可将阵列A变换成以四位小数精度表示的字符串,如需要可指定以指数形式表示。在str=num2str(A,precision)中,可在precision中指定有效的数字位数;在str=num2str(A,format)中,可由format指定字符的格式,缺省时取%11.4g,表示最长取11位有效数字,其中4位小数。,表7.2format格式选项,注意,不是所有的format选项都适用于num2str函数。例如:num2str(pi)ans=3.1416num2str(eps)ans=2.2204e-016num2str(pi,%-10.6e)ans=3.141593e+000num2str(-pi,%-10.6e)ans=-3.141593e+000,num2str(pi,%10.6f)ans=3.141593num2str(pi,%-10.6g)ans=3.14159num2str(pi,%+10.6e)ans=+3.141593e+000num2str(-pi,%+10.6e)ans=-3.141593e+000,2int2str功能:将整数变换成字符串。格式:str=int2str(N)说明:str=int2str(N)可将整数N变换成字符串,输入N可以是标量、向量,还可以是矩阵,对输入的非整数值在变换之前被截断。例如:,s1=int2str(2+5)s1=7s2=int2str(pi)s2=3s3=int2str(10*randn(3,3)s3=-4312-17-1101123,3mat2str功能:将矩阵变换成字符串。格式:str=mat2str(A)str=mat2str(A,n)说明:str=mat2str(A)可将矩阵A变换成字符串,这样可用作eval函数的输入;str=mat2str(A,n)可在变换时采用n位精度。例如:,A=12;34A=1234b=mat2str(A)b=12;34这时b为字符串,利用eval(b)可重新产生矩阵A。,4str2mat功能:从字符串中形成矩阵。格式:S=str2mat(T1,T2,T3,)说明:S=str2mat(T1,T2,T3,)可以将由字符串T1,T2,T3,表示的数据当成矩阵的行,如果字符串不等长,则会自动补上空格。这个函数可以由char函数取代,在以后版本中可能会被废弃。例如:,x=str2mat(36842,39751,38453,9030)x=3684239751384539030,5str2num功能:将字符串变换为数值。格式:X=str2num(str)说明:str2num是num2str的逆函数。x=str2num(str)可将表示数值的字符串str变换为数值。,例如:str2num(pi)ans=3.1416str2num(1.23.2;5.89.0)ans=1.20003.20005.80009.0000,6sprintf功能:将格式化数据写入字符串。格式:s=sprintf(format,A,)s,errmsg=sprintf(format,A,),说明:s=sprintf(format,A,)可对矩阵A(及其它矩阵)中的数据按指定格式(由format指定)进行格式化,并写入MATLAB的字符串变量s中。sprintf函数几乎等同于fprintf函数,只是sprintf函数不将结果写入文件。format用于指定输出格式的表示法、对齐格式、有效数字、域宽度及其它方面的信息,参见表7.2(format选项格式)。s,errmsg=sprintf(format,A,)还可以在发生错误时得到出错信息errmsg。例如输入,sprintf(%0.5g,(1+sqrt(5)/2)ans=1.618sprintf(%0.5g,1/eps)ans=4.5036e+015sprintf(%15.5f,1/eps)ans=4503599627370496.00000sprintf(%d,round(pi)ans=3sprintf(%s,hello)ans=hellosprintf(Thearrayis%dx%d.,2,3)ans=Thearrayis2x3.sprintf(n)ans=,7sscanf功能:在指定格式下读取字符串。格式:A=sscanf(s,format)A=sscanf(s,format,size)A,count,errmsg,nextindex=sscanf(),说明:A=sscanf(s,format)可从MATLAB字符串变量s中按指定格式format读取数据进行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工方雨季施工方案
- 房产渠道推广方案范本
- 排水检查井工程施工方案
- 2025昆仑数智科技有限责任公司春季高校毕业生招聘15人模拟试卷及1套完整答案详解
- 厂房旧物改造方案范本
- 2025年仪征市属事业单位考试试卷
- 老河口拖拉管施工方案
- 2025安徽皖西国有投资控股集团公司部分经理层、内设部门和子公司负责人选聘拟聘用人员考前自测高频考点模拟试题附答案详解(模拟题)
- 纪检监察办案安全题库400题及答案解析
- 从业人员考试试题及答案解析
- 标签打印机的快速批量打印方法
- GB/T 1504-2024铸铁轧辊
- 食品行业创新与研发
- 电力各种材料重量表总
- 樊荣-《医疗质量管理办法》核心制度要点解析与案
- 男性不育症诊治指南课件
- 《声声慢》省赛一等奖
- 消防安全教育培训记录表
- 国家开放大学《实用管理基础》形考任务1-4参考答案
- 2023混凝土结构耐久性电化学修复技术规程
- 变压器主保护基本知识测试题
评论
0/150
提交评论