matlab教學(xué)課件:第七章 字符串處理_第1頁
matlab教學(xué)課件:第七章 字符串處理_第2頁
matlab教學(xué)課件:第七章 字符串處理_第3頁
matlab教學(xué)課件:第七章 字符串處理_第4頁
matlab教學(xué)課件:第七章 字符串處理_第5頁
已閱讀5頁,還剩124頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第七章 字符串處理 7.1 字符陣列 7.2 字符串單元陣列 7.3 字符串比較 7.4 字符串搜索與取代 7.5 字符串與數(shù)值之間的變換 7.6 綜合設(shè)計示例 7.7 字符串函數(shù)習(xí)題 7.1 字 符 陣 列 在MATLAB中,字符是以其ASCII碼表示的,這樣可直接在屏幕上顯示字符或者在打印機上打印字符。輸入字符數(shù)據(jù)時應(yīng)用單引號括起來,例如輸入 name=西安電子科技大學(xué)電子工程學(xué)院;這時采用class命令可以檢查其類型class(name)ans=char 這說明變量name的類型為字符型,再輸入size(name)ans=1 14這說明name占用114向量,從這可以看出每個漢字只占用一

2、個字符位置。眾所周知,一個漢字需要用兩個字節(jié)的內(nèi)碼表示,每個字符應(yīng)該占用兩個字節(jié),這一點可由下列命令得到證實: 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 變量name含有14個漢字,占用了28個字節(jié),然而,name1包含有6個英文字母,占用12個字節(jié),這說明每個字符都采用16位的ASCII碼存儲。 7.1.1 字符與ASCII碼之間的變換

3、在MATLAB中,每個字符按16位的ASCII碼存儲,這大大方便了在MATLAB中使用雙字節(jié)內(nèi)碼字符集,如漢字系統(tǒng)。利用double和char函數(shù)可在字符與其ASCII碼之間進行轉(zhuǎn)換。例如,在得到上述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 53671Columns 9 through 14 46567 55251 47524 46028 53671 54458 aname

4、1=char(a1)aname1 =MATLAB aname=char(a)aname =西安電子科技大學(xué)電子工程學(xué)院 7.1.2 建立二維字符陣列在建立二維陣列時,應(yīng)注意確保每行上的字符數(shù)相等,如果長度不等,應(yīng)在其后補空格。例如輸入 str1=MATLAB ;SIMULINKstr1=MATLAB SIMULINK 必要時可利用blanks函數(shù)補上空格,例如輸入book1=MATLAB Programming Language;book2=Signal Processing using MATLAB;book3=Control System using MATLAB;book4=Neural

5、 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 MATLABControl System using MATLAB Neural Network using MATLAB 當(dāng)從字符陣列中提取字符串時,可利用deblank函數(shù)刪

6、除字符串末尾多余的空格 str2=BOOK(1,:);length(str2)ans = 30 str3=deblank(str2);length(str3)ans =27這說明在str3中已刪除了末尾的空格。 7.2 字符串單元陣列 建立字符串單元陣列存儲字符串,比字符陣列更方便、更靈活。MATLAB專門為處理字符串單元陣列提供了函數(shù),如cellstr,findstr等。利用cellstr函數(shù)可方便地將字符陣列變換成字符串單元陣列。例如,在上面已得到BOOK字符陣列后,輸入 BOOKcell=cellstr(BOOK)BOOKcell = MATLAB Programming Languag

7、e Signal Processing using MATLAB Control System using MATLAB Neural Network using MATLAB 建立了字符單元陣列BOOKcell,這時每個元素均為字符串,而且已刪除了末尾的空格,這可通過length函數(shù)求取其長度來證實。length(BOOKcell1)ans= 27 相反,利用char函數(shù)可將字符單元陣列變換成字符陣列, 而且能夠自動在陣列元素中加上適當(dāng)?shù)目崭?,以便使每行的長度相等。 BOOK1=char(BOOKcell)BOOK1 =MATLAB Programming Language Signal P

8、rocessing using MATLABControl System using MATLAB Neural Network using MATLAB 7.3 字符串比較 比較字符串可有以下幾種方式: 比較兩個字符串或其部分是否相同。 比較兩個字符串中的個別字符是否相同。 可對字符串中的每個元素進行歸類,如根據(jù)是字母還是非字母進行歸類。MATLAB為這些任務(wù)提供了一些專用的函數(shù),如strcmp、strcmpi、strncmp、strncmpi和findstr等,它們既適用于字符陣列,也適用于字符單元陣列。 7.3.1 比較字符串是否相同strcmp函數(shù)用于比較兩字符串是否相同,strcmp

9、i函數(shù)則在比較時忽略其大、小寫,即ABC等同于abc;strncmp函數(shù)用來比較兩字符串的前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 比較字符是否相同 當(dāng)要比較兩個字符串中個別字符是否相同時,可采用MATLAB的關(guān)系操作符。例如: str1=hell

10、o; str2=help!;k=str1= =str2k = 1 1 1 0 0 實際上,還可以采用其它的關(guān)系操作符(、=、!=),這樣就可以比較兩個字符串的大小關(guān)系,當(dāng)然實際確定其大小關(guān)系時采用的是其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 聯(lián)合isletter和i

11、sspace這兩個函數(shù),可檢測字符串是否全部由字母和空格構(gòu)成。例如: str1=I wish this book can be beneficial to you; let1=isletter(str1); let2=isspace(str1); let3=let1| let2;if all(let3) disp(所有字符均為英文字母或空格) else disp(字符中包含非英文字母和空格) end 執(zhí)行后得所有字符均為英文字母或空格如果輸入改為str1=My post address is XiDian Box 134;則執(zhí)行后得字符中包含非英文字母和空格 7.4 字符串搜索與取代 MATL

12、AB為字符串的搜索與取代提供了幾個函數(shù)findstr、strmatch、strrep、strtok等,這幾個函數(shù)的靈活運用,可完成比較復(fù)雜的任務(wù)。例如: 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函數(shù)可找出字符串的首部(第一個分隔符之前的字符串):str2=strtok(str1)str2=Example利用strtok函數(shù)還可以完成從英文句子中提

13、取單詞,為此編寫函數(shù)來實現(xiàn):function allwords=words(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 字符串與數(shù)值之間的變換 MATLAB提供了一組函數(shù)可用來在各種數(shù)制之間進行變換。例如:

14、 x=53176251; 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個字節(jié)),而當(dāng)它變換成字符時占用了8個字符單元(每個單元占用2個字節(jié))。在將數(shù)值表示成字符串時還可以指定位數(shù),如 p=num2str(pi,8)p =3.1415927 d1=bin2dec(10101)d1 = 21 b1=dec2bin(d1,8)b1 =000101

15、01 d2=hex2dec(A1B)d2 = 2587 h2=dec2hex(d2,4)h2 =0A1B d3=base2dec(12210,3)d3 = 156 t3=dec2base(d3,3)t3 =12210 其中,最后一組完成在三進制數(shù)與十進制數(shù)之間進行轉(zhuǎn)換。 只有利用num2str函數(shù)才能將含小數(shù)的數(shù)值變換成字符串,從而可以在圖形標(biāo)題或標(biāo)記中使用與數(shù)據(jù)相關(guān)的數(shù)值。例如,假設(shè)已利用plot(x,y)繪制出圖形,則可給x軸加上這樣的標(biāo)記: str1=num2str(min(x);str2=num2str(max(x);str=Vaue of x is from,str1,to,str2

16、; xlabel(str)利用mat2str函數(shù)可將矩陣變換成字符串形式。例如: 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 綜合設(shè)計示例 為說明字符串的應(yīng)用,設(shè)計MATLAB程序?qū)Ρ4嬖谖募械奈谋具M行處理,要求:(1) 統(tǒng)計文件中字符串error出現(xiàn)的次數(shù)。(2) 將文件中的字符串error修改成

17、Error。(3) 統(tǒng)計文件中字符(a,b, t)出現(xiàn)的次數(shù)及頻度。(4) 統(tǒng)計文件中單詞(the, and)出現(xiàn)的次數(shù)。 這里假設(shè)要處理的文件為bugs.txt,其內(nèi)容為 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, thus your problem m

18、ay 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 files patches

19、.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 feature : -). * Th

20、e error has not already been reported. If you have WWW access, you can search the LaTeX bugs database using this URL: /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 (please report problems with other soft

21、ware 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 genuine bug in a recent version of th

22、ecore 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 this file also.* Generate a b

23、ug 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 English speaking country. Repo

24、rts 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). 步驟1:讀取文件,建立字符串。為處理文件中的字符串

25、,先打開文件,讀取文件,存入字符串變量。這里要用到有關(guān)文件的輸入/輸出函數(shù),本書未對此進行討論,因此,有必要對文件的輸入/輸出函數(shù)作一簡要介紹,詳見MATLAB的在線幫助。(1) fid = fopen(filename,permission)可打開指定的文件filename,其中permission用于指定允許的操作方式,當(dāng)permission取r、w、r+或w+、a時,分別表示可對文件進行讀、寫、讀寫、在文件尾寫的操作,fid為代表這一文件的文件標(biāo)識符。 (2) A,count = fread(fid,size,precision)可對已打開的文件fid進行讀操作,其中size表示一次讀取

26、的字符數(shù),當(dāng)size取Inf時,表示讀至文件尾。precision表示讀取的字符的精度,當(dāng)取char、uchar、schar時,表示讀取字符、無符號字符、有符號字符;當(dāng)取int8、int16、int32、int64時,表示讀取整數(shù)(8、16、32、64位);當(dāng)取uint8、uint16、uint32、uint64時,表示讀取無符號整數(shù);當(dāng)取float32、float64時,表示讀取浮點數(shù)(32、64位)等。A為讀取的內(nèi)容,count記錄所讀取的長度。(3) count=fwrite(fid,A,precision)可將數(shù)據(jù)A按指定的格式寫入文件fid,輸出變量count記錄所寫入的長度。 (4

27、) status=fclose(fid)可關(guān)閉指定的文件fid,status記錄關(guān)閉文件操作的狀態(tài),關(guān)閉成功時status=0,否則status=-1;status = fclose(all)表示關(guān)閉已打開的所有文件。有了這些函數(shù),可以編寫出讀取文件字符的函數(shù)readfile:function y,count=readfile(filename)fid = fopen(filename);y,count = fread(fid,Inf,char);fclose(fid);這樣可方便地讀入文件,并建立字符陣列: yi,ct=readfile(bugs.txt); y=char(yi) 步驟2:統(tǒng)

28、計error出現(xiàn)的次數(shù)。 這只需要直接應(yīng)用findstr函數(shù)找出字符串error在y中的位置,然后求出位置的個數(shù)。 k=findstr(y,error);L1=length(k);disp(字符串error出現(xiàn)的次數(shù)為,num2str(L1)執(zhí)行后得字符串error出現(xiàn)的次數(shù)為6 步驟3:將error修改成Error。 這只需要直接應(yīng)用strrep函數(shù),在字符串y中將error修改成Error,替換結(jié)果只顯示出第一段。 y1=strrep(y,error,Error);disp(error修改成Error后的結(jié)果:)disp(char(y1(1:322)執(zhí)行后得error修改成Error后的結(jié)

29、果: 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, thus your problem may have already been fixed. 步驟4:統(tǒng)計字符(a,b,t)出現(xiàn)的次數(shù)及頻度。為統(tǒng)計字符出現(xiàn)的次數(shù),先編寫出函數(shù)countchar,其中使用了

30、關(guān)系操作符:function y=countchar(str,c)統(tǒng)計字符出現(xiàn)的次數(shù)k=upper(str)=upper(c);y=sum(k); 還應(yīng)注意,適當(dāng)處理大、小寫英文字母,這里先將字符都變換成大寫字母,然后進行比較,這也說明countchar函數(shù)只適用于統(tǒng)計英文字母出現(xiàn)的次數(shù),有了這個函數(shù)后可很容易地求出字符 (a,b,t)出現(xiàn)的次數(shù)及頻度。 c1=countchar(y,a);c2=countchar(y,b);c3=countchar(y,t);disp(字符a,b,t出現(xiàn)的次數(shù)分別為,num2str(c1,c2,c3)cc=round(1000*c1/ct,c2/ct,c3/

31、ct)/100;disp(字符a,b,t出現(xiàn)的頻度分別為百分之,num2str(cc, -5.2g)執(zhí)行后得字符a, b, t出現(xiàn)的次數(shù)分別為146 33 192字符a, b, t出現(xiàn)的頻度分別為百分之0.57 0.13 0.75 步驟5:統(tǒng)計單詞(the, and)出現(xiàn)的次數(shù)。同樣,為統(tǒng)計單詞出現(xiàn)的次數(shù),先編寫出函數(shù)countword,這里先將字符都變換成大寫字母,然后利用7.4節(jié)設(shè)計的單詞提取函數(shù)words對字符串y進行處理,最后利用strmatch函數(shù)查找嚴(yán)格匹配的子字符串: function y=countword(str,w)統(tǒng)計單詞出現(xiàn)的次數(shù)str1=upper(str);w1=u

32、pper(w);str2=words(str1);k=strmatch(w1,str2,match);y=length(k); 有了這個函數(shù)后可以很容易地求出單詞出現(xiàn)的次數(shù):w1=countword(y, the);w2=countword(y, and);disp(單詞the, and出現(xiàn)的次數(shù)分別為, num2str(w1, w2)執(zhí)行后得單詞the,and出現(xiàn)的次數(shù)分別為27 3 最后我們給出整個MATLAB程序:clear讀取文件,建立字符串yi,ct=readfile(bugs.txt);y=char(yi);統(tǒng)計error出現(xiàn)的次數(shù)k=findstr(y,error);L1=len

33、gth(k);disp(字符串error出現(xiàn)的次數(shù)為,num2str(L1)將error修改成Errory1=strrep(y,error,Error);disp(error修改成Error后的結(jié)果:)disp(char(y1(1:322)統(tǒng)計字符出現(xiàn)的次數(shù)(a,b,t)及頻度 c1=countchar(y,a);c2=countchar(y,b);c3=countchar(y,t);disp(字符a,b,t出現(xiàn)的次數(shù)分別為,num2str(c1,c2,c3)cc=round(1000*c1/ct,c2/ct,c3/ct)/100;disp(字符a,b,t出現(xiàn)的頻度分別為百分之,num2str

34、(cc,-5.2g)統(tǒng)計單詞出現(xiàn)的次數(shù)(the,and)w1=countword(y,the);w2=countword(y,and);disp(單詞the,and出現(xiàn)的次數(shù)分別為,num2str(w1,w2) 7.7 字符串函數(shù) 表7.1 字符串函數(shù) 7.7.1 一般函數(shù)1char功能:建立字符陣列。格式:S=char(X)S=char(C)S=cahr(t1,t2,t3,) 說明: S=char(X)可將X中以字符ASCII碼表示的值轉(zhuǎn)換成相應(yīng)的字符,利用double函數(shù)可作相反的變換。 在S=char(C)中,C表示字符串的單元陣列,這條命令可將單元陣列中的字符串變換成字符陣列S,利用c

35、ellstr可作相反的變換。 在S=char(t1,t2,t3,)中,t1,t2,t3,為字符串的行陣列,則S是以t1,t2,t3,為行構(gòu)成的二維字符矩陣,其行尺寸取t1,t2,t3,中的最長者,其它字符行陣列在末尾補空格,使所有行陣列等長,從而構(gòu)成二維字符矩陣S。 例如,分三行打印出其ASCII為32127之間的字符,可輸入 s=char(reshape(32:127,32,3)s = !#$%&()*+,-./0123456789:;?ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz| 2double 功能:將字符陣列變換成雙精度數(shù)

36、值。 格式: Y=double(X) 說明: Y=double(X)可將字符陣列X轉(zhuǎn)換成其ASCII碼,如果X本身已經(jīng)是雙精度數(shù)值,則double函數(shù)不起作用。例如: s=ABC; y=double(s)y = 65 66 67 z=double(y)z =65 66 67 3. cellstr功能:從字符陣列中建立單元陣列。格式:C=cellstr(s)說明:(參見6.5節(jié)。) 4blanks功能:建立空格字符串。格式:s=blanks(n)說明:s=blanks(n)可產(chǎn)生n個空格。例如:disp(XXX blanks(5) yyy)則可在XXX與yyy之間加上5個空格。 5deblank

37、功能:刪除字符串末尾的空格。格式: str=deblank(str) c=deblank(c)說明:str=deblank(str)可刪去字符串str中末尾的空格;在c=deblank(c)中,c為字符串的單元陣列,可將deblank函數(shù)應(yīng)用于c中的每個元素。例如: A1,1 = MATLAB ;A1,2 = SIMULINK ;A2,1 = Toolboxes ;A2,2 = The MathWorks A = MATLAB SIMULINK Toolboxes The MathWorks B=deblank(A)B = MATLAB SIMULINK Toolboxes The MathW

38、orks 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, 為函數(shù)function的輸入變量,計算結(jié)果保存在a1,a2,a3,中。例如,輸入 A = 4*5-3; ev

39、al(A)ans = 17 e,v=eval(eig(2 4; -6 5)e = 0.1936 - 0.6021i 0.1936 + 0.6021i 0.7746 0.7746 v = 3.5000 + 4.6637i 0 0 3.5000 - 4.6637i P = pwd; eval(P)ans =C:Program FilesMATLAB704work 這時可得到程序pwd.m所在的位置。輸入D = odedemo ; quaddemo; zerodemo;fitdemo ;n = input(Select a demo number: );eval(D(n,:)則可選擇執(zhí)行不同的演示程

40、序。 7.7.2 字符串測試1ischar功能:檢測到字符陣列(字符串)時為邏輯真。格式:k=ischar(s) 說明:在k=ischar(s)中,當(dāng)s為字符陣列或字符串時,k為邏輯真(其值為1),否則k為0。 2iscellstr功能:檢測到字符串的單元陣列時為邏輯真。格式:k=iscellstr(s)說明:在k=iscellstr(s)中,當(dāng)s為字符串的單元陣列時,k為邏輯真(其值為1),否則k為0。 3isletter 功能:檢測到英文字母時為邏輯真。 格式: TF=isletter(str)說明:在TF=isletter(str)中,當(dāng)str中某一位為英文字母時,對應(yīng)的TF中的單元為邏

41、輯真,否則為邏輯假。例如: str=MAX is 1200; TF=isletter(str)TF = 1 1 1 0 1 1 0 0 0 0 0 4isspace功能:檢測到空格時為邏輯真。格式:TF=isspace(str) 說明:在TF=isspace(str)中,當(dāng)str中某一位為空白(即空格、換行、回車、制表符Tab、垂直制表符、打印機走紙符)時,相應(yīng)的TF中的單元為邏輯真,否則為邏輯假。例如: str=MAX is 1200; TF=isspace(str)TF = 0 0 0 1 0 0 1 0 0 0 0 7.7.3 字符串操作1strcat功能:字符串連接。格式:t=strc

42、at(s1,s2,s3,)說明: t=strcat(s1,s2,s3,)可按水平方向連接字符串s1,s2,s3,并忽略尾部添加的空格。所有的輸入s1,s2,s3,必須具有相同的行數(shù)。當(dāng)輸入全為字符陣列時,t也為字符陣;當(dāng)輸入中包含有字符串的單元陣列時,則t為單元陣列。例如: a=Hello; b=how are you!;c=strcat(a,b)c =Hellohow are you! d=a bd =Hello how are you! 2strvcat功能:字符串的垂直連接。格式:t=strvcat(s1,s2,s3,)說明:strvcat與strcat函數(shù)類似,只是按垂直方向連接字符串

43、s1,s2,s3,即以s1,s2,s3,作為t的行,為此會自動在s1,s2,s3,的尾部補空格以形成字符串矩陣。例如: s1=first; s2=string; s3=matrix; s4=second; t1=strvcat(s1,s2,s3)t1 =first stringmatrix t2=strvcat(s4,s2,s3)t2 =secondstringmatrix 3strcmp功能:比較字符串。格式:k=strcmp(str1,str2)TF=strcmp(S,T) 說明: k=strcmp(str1,str2)可對兩個字符串str1和str2進行比較,如果兩者相同,則返回邏輯真(

44、其值為1),否則返回邏輯假(0);在TF=strcmp(S,T)中,S、T為字符串單元陣列,TF與S、T尺寸相同,且當(dāng)相應(yīng)T、S元素相同時其值為1,否則為0。注意T、S必須具有相同的尺寸,或者其中之一為標(biāo)量。例如: strcmp(Yes,No)ans = 0 strcmp(Yes,Yes)ans =1 A=MATLAB SIMULINK;Toolboxes The MathWorksA = MATLAB SIMULINK Toolboxes The MathWorks B=Handle Graphics Real Time Workshop;Toolboxes The MathWorks B

45、= Handle Graphics Real Time Workshop Toolboxes The MathWorks C=Signal Processing Image Processing;MATLAB SIMULINKC = Signal Processing Image Processing MATLAB SIMULINK strcmp(A,B)ans = 0 0 1 1 strcmp(A,C)ans = 0 00 0 4strcmpi 功能:比較字符串(忽略大、小寫)。 格式: k=strcmpi(str1,str2) TF=strcmpi(S,T) 說明: strcmpi與str

46、cmp函數(shù)類似,只是在比較時忽略字符的大、小寫,有關(guān)說明參見strcmp函數(shù)。例如: s1=matrix; s2=Matrix; strcmpi(s1,s2)ans = 1 strcmp(s1,s2)ans = 0 5strncmp功能:比較兩個字符串的前n個字符。格式:k=strncmp(str1,str2,n)TF=strncmp(S,T,n)說明:strncmp函數(shù)與strcmp函數(shù)類似,只是strncmp函數(shù)根據(jù)字符串的前n個字符產(chǎn)生結(jié)果,說明部分可參見strcmp函數(shù)。例如: s1=MATLAB expression;s2=MATLAB variable;k1=strncmp(s1,

47、s2,6)k1 = 1 k2=strcmp(s1,s2)k2 = 0 6strncmpi功能:比較兩個字符串的前n個字符(忽略大、小寫)。格式:k=strncmpi(str1,str2,n)TF=strncmpi(S,T,n) 說明:strncmpi與strncmp函數(shù)類似,只是strncmpi在比較字符串的前n個字符時,忽略其大、小寫,這里不再贅述。例如:s1=MATLAB expression;s2=matlab variable;k1=strncmpi(s1,s2,6)k1 = 1 k2=strncmp(s1,s2,6)k2 = 0 7findstr功能:在字符串中查找子字符串。格式:k

48、 = 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=MATLAB is a high-performance language for technical computing.

49、; str2=language; k=findstr(str1,str2)k = 30 8strjust功能:調(diào)整字符陣列。格式: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 =MATLAB SIMULINK t=strjust(s,righ

50、t)t =MATLABSIMULINK 9strmatch功能:查找匹配字符串。格式:k=strmatch(str,STR)k=strmatch(str,STR,exact)說明:k=strmatch(str,STR)可在STR字符串中找出以str開頭的字符串位置;k=strmatch(str,STR,exact)可找出嚴(yán)格以str開頭的字符串的位置。例如: k1=strmatch(max,strvcat(max,minimax,maximum)k1= 1 3 k2=strmatch(max,strvcat(max,minimax,maximum),exact)k2 = 1 10strrep功

51、能:字符串的搜索與取代。格式:str=strrep(str1,str2,str3)說明:str=strrep(str1,str2,str3)可在字符串str1中找出子字符串str2,并以str3取代。例如: s1= This is a good example.;str = strrep(s1,good,great)str = This is a great example. A =MATLAB,SIMULINK Toolboxes,The MathWorks;B = Handle Graphics,Real Time Workshop Toolboxes,The MathWorks; C =

52、 Signal Processing,Image Processing MATLAB,SIMULINK; strrep(A,B,C)ans= MATLAB SIMULINK MATLAB SIMULINK 11strtok功能:找出字符串的首部。格式:token=strtok(str)token=strtok(str,delimiter)token,rem=strtok() 說明:token=strtok(str,delimiter)可找出字符串str的首部,即位于第一個分隔符之前的一串字符,其中向量delimiter用于指定有效的分隔符。token=strtok(str)可以指定采用缺省的分

53、隔符,即空格(ASCII碼為32)、Tabs(ASCII碼為9)和回車(ASCII碼為13)。token,rem=strtok()除得到字符串的首部token外,還得到了剩余字符串rem。 s=This is a good example.; token,rem=strtok(s)token =Thisrem = is a good example. 例如: 12upper功能:將字符串變換為大寫。格式:t=upper(str)B=upper(A)說明:t=upper(str)可將str中的小寫字母變換成大寫字母,其它字符不變。B=upper(A)可將字符串單元陣列A中的小寫字母變換成大寫字母

54、。例如: upper(Matlab V7.0)ans =MATLAB V7.0 13lower功能:將字符串變換為小寫。格式:t=lower(str)B=lower(A) 說明:t=lower(str)可將str中的大寫字母變換為小寫字母,其它字符不變。B=lower(A)可將字符串單元陣列A中的大寫字母變換成小寫字母。例如: lower(Matlab V7.0)ans =matlab v7.0 7.7.4 字符串與數(shù)值之間的變換1num2str功能:將數(shù)值變換成字符串。格式:str=num2str(A)str=num2str(A,precision)str=num2str(A,format)

55、 說明:num2str函數(shù)可將數(shù)值變換成字符串表示,利用這種函數(shù)可方便地在圖形標(biāo)記和標(biāo)題中使用數(shù)值。str=num2str(A)可將陣列A變換成以四位小數(shù)精度表示的字符串,如需要可指定以指數(shù)形式表示。在str=num2str(A,precision)中,可在precision中指定有效的數(shù)字位數(shù);在str=num2str(A,format)中,可由format指定字符的格式,缺省時取%11.4g,表示最長取11位有效數(shù)字,其中4位小數(shù)。 表7.2 format格式選項 注意,不是所有的format選項都適用于num2str函數(shù)。例如: num2str(pi)ans =3.1416 num2st

56、r(eps)ans =2.2204e-016 num2str(pi,%-10.6e)ans =3.141593e+000 num2str(-pi,%-10.6e)ans =-3.141593e+000 num2str(pi,%10.6f)ans =3.141593 num2str(pi,%-10.6g)ans =3.14159 num2str(pi,%+10.6e)ans =+3.141593e+000 num2str(-pi,%+10.6e)ans =-3.141593e+000 2int2str功能:將整數(shù)變換成字符串。格式: str=int2str(N) 說明: str=int2str(

57、N)可將整數(shù)N變換成字符串,輸入N可以是標(biāo)量、向量,還可以是矩陣,對輸入的非整數(shù)值在變換之前被截斷。例如: s1=int2str(2+5)s1 =7 s2=int2str(pi)s2 =3 s3=int2str(10*randn(3,3)s3 =-4 3 12-17 -11 0 1 12 3 3mat2str功能:將矩陣變換成字符串。格式: str=mat2str(A) str=mat2str(A,n) 說明:str=mat2str(A)可將矩陣A變換成字符串,這樣可用作eval函數(shù)的輸入;str=mat2str(A,n)可在變換時采用n位精度。例如: A=1 2;3 4A = 1 2 3 4

58、 b=mat2str(A)b =1 2;3 4這時b為字符串,利用eval(b)可重新產(chǎn)生矩陣A。 4str2mat 功能:從字符串中形成矩陣。格式:S = str2mat(T1, T2, T3, )說明:S = str2mat(T1, T2, T3, )可以將由字符串T1, T2, T3, 表示的數(shù)據(jù)當(dāng)成矩陣的行,如果字符串不等長,則會自動補上空格。這個函數(shù)可以由char函數(shù)取代,在以后版本中可能會被廢棄。例如: x = str2mat(36842, 39751, 38453, 9030)x =3684239751384539030 5str2num功能:將字符串變換為數(shù)值。格式:X=str

59、2num(str)說明:str2num是num2str的逆函數(shù)。x=str2num(str)可將表示數(shù)值的字符串str變換為數(shù)值。例如: str2num(pi)ans = 3.1416 str2num(1.2 3.2;5.8 9.0)ans = 1.2000 3.2000 5.8000 9.0000 6sprintf功能:將格式化數(shù)據(jù)寫入字符串。格式:s=sprintf(format,A,)s,errmsg=sprintf(format,A,) 說明:s=sprintf(format,A,)可對矩陣A(及其它矩陣)中的數(shù)據(jù)按指定格式(由format指定)進行格式化,并寫入MATLAB的字符串變

60、量s中。sprintf函數(shù)幾乎等同于fprintf函數(shù),只是sprintf函數(shù)不將結(jié)果寫入文件。format用于指定輸出格式的表示法、對齊格式、有效數(shù)字、域?qū)挾燃捌渌矫娴男畔?,參見?.2 (format選項格式)。s, errmsg=sprintf(format, A, )還可以在發(fā)生錯誤時得到出錯信息errmsg。例如輸入 sprintf(%0.5g,(1+sqrt(5)/2)ans =1.618 sprintf(%0.5g,1/eps)ans =4.5036e+015 sprintf(%15.5f,1/eps)ans =4503599627370496.00000 sprintf(%d

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論