matlab講義第五章.ppt_第1頁
matlab講義第五章.ppt_第2頁
matlab講義第五章.ppt_第3頁
matlab講義第五章.ppt_第4頁
matlab講義第五章.ppt_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第五章 字符串,5.1 字符串概念 5.2 字符串操作 5.3 字符串轉(zhuǎn)換,5.1 字符串概念,在MATLAB中,數(shù)個字符(Characters)可以構(gòu)成一個字符串(Strings),一個字串是被視為一個行向量(Row Vector)進(jìn)行儲存,而這一字符串中的每一字符(含空格符),是以其ASCII碼的形式存放于此行向量中的每一個元素,只是其外顯形式仍是可讀的字符。如: phrase=Matlab Program. 建立字符串變量phrase phrase= Matlab Program.,多個字符中變量可直接并排,以得到一個新寧符串變量。例如: str=I like MATLAB; 建立字符串

2、變量strl str2= and Perl!; 建立字符串變量str2 str3=strl str2 直接行并排串變量strl和str2,以建立一個新字符串變量str3 str3= I like MATLAB and Perl!,提示:MATLAB用“單引號”(Single Quote)來界定字符串變量,而C語言則是用“雙引號” 來界定字符串變量,這是兩者不同之處。,要輸入含有單引號的字符串, 可重復(fù)單引號的使用,例如: phrase=I v got a date!, 重復(fù)的使用 phrase= I ve got a date! 如果要計算字符串變量phrase的長度(即組成字符的個數(shù)),可用

3、length命令: length(phrase) 計算字符串變量phrase的長度 ans= 16 若要查看字符串變量phrase的儲存內(nèi)容(即ASCII碼),可使用double或abs命令,例如: phraseascii=double(phrase) 查看phrase的ASCII碼 phraseascii= Columns l through 12 73 39 118 101 32 103 11l 116 32 97 32 100 Columns 13 through 16 97 116 101 33,若要將字符串變量phraseascii儲存的ASCII碼轉(zhuǎn)換成字符串形式,可用char命令

4、,例如: phrase2=char(phraseascii) 將ASCII碼轉(zhuǎn)回寧符串形式 phrase2= Ive got a date! 由于MATLAB在儲存寧符串時,每一個字符會占用兩個字節(jié)(2bytes)。 可使用whos命令來查看字符串變所占用的儲存空間: whos phrase 查看工作空間內(nèi)變量phrase占用內(nèi)存大小 Name Size Bytes Class phrase lxl6 32 char array Grand total ls 16 elements using 32 bytes,由于MATLAB是以兩個字節(jié)來儲存一個字符,所以可以支持中文。例如: Chines

5、e=吉林大學(xué),地學(xué)部 Chinese= 吉林大學(xué),地學(xué)部 中文的ASCII碼都會大于數(shù)字128,可驗證如下: abs(Chinese) ans = Columns 1 through 7 21513 26519 22823 23398 44 22320 23398 Column 8 37096,由于MATLAB將字符串以其相對應(yīng)的ASCII碼(即數(shù)字形式)儲存成一行向量,所以若對此字符串直接進(jìn)行數(shù)值運算,其結(jié)果就變成一般數(shù)值向量的運算,而不再是字符串的運算,例如: x= Chinese + 1 x= Columns l through 6 42166 42218 43207 41282 421

6、66 42218 Column 7 45735 字符串變量所占用的空間是同長度數(shù)值變量的四分之一,所以如果數(shù)據(jù)包含很多字符串,盡量以字符串變量來儲存數(shù)據(jù)。,可用兩種方法來儲存多個字符串于一個變量之中。第一種方法是使用二維字符數(shù)組,但必須先確認(rèn)每個字符串(即每一行)的長度一樣,否則就必須在短字符串結(jié)尾補上空格符,以確保每一字符串均有相同的長度。例如: departments=ee ;cs ;econ注意“”、“;”和空格符號的使用 departments= ee cs econ departments1= ee; cs;econ departments1= ee cs econ,請注意上述二個字

7、符串均各由4個字符(含空格符)構(gòu)成,故其長度均為4,共占用內(nèi)存大小為24個字節(jié)(即3個字符串*4個字符*2 bytes=24 bytes)。 departments2=ee,cs,econ 注意“”、“,”符號的使用 departments2 = eecsecon 第二種存儲存多個宇符串于個變量的方法,是使用char命令,例如: departments3=char(ee,cs,econ) 注意“()”及“,”的使用 departments3= ee cs econ,在從二維字符數(shù)組抽取出字符串時,切記要使用deblank命令來刪除尾部的空格符,例如: deptl=departments(1,:

8、) %(1,:)代表第一行的元素 dept1= ee dept2=deblank(departments(1,:) %使用deblank命令來移除 dept2= %尾部的空格 ee length(dept1) %顯示變量deptl的長度 ans= 4 length(dept2) %顯示變量dept2的長度 ans= 2,如果字符串的長度差異較大,那么使用二維字符數(shù)組來儲存多個字符串,將造成內(nèi)存空間的浪費??墒褂谩爱愘|(zhì)數(shù)組”。如:celldata=ee,cs,eoon 以異質(zhì)數(shù)組來儲存多個字符串,注意“,”及“,”符號的使用 celldata= ee cs econ 可以使用cellstr命令將

9、字符數(shù)組轉(zhuǎn)換成異質(zhì)數(shù)組: celldata=cellstr(departments) celldata= ee cs econ,在上例中,cellstr命令將字符數(shù)組departments轉(zhuǎn)換成異質(zhì)數(shù)組celldata儲存,而原先補在字符數(shù)組departments結(jié)尾的空格符已被刪除,可用length命令驗證如下: length(celldata2) 顯示異質(zhì)數(shù)組celldata第2個元素長度 若要將包含字符串的異質(zhì)數(shù)組轉(zhuǎn)換成一般的二維字符數(shù)組,可用char命令,例如: strdepts=char(celldata) 異質(zhì)數(shù)組celldata轉(zhuǎn)換成字符數(shù)組,結(jié)尾補空。 strdepts= ee

10、 cs econ,5.2 字符串操作,函數(shù)disp允許不顯示它的變量名而顯示一個字符串。例如: v=I cant find the manual! v = I cant find the manual! disp(v) I cant find the manual!,函數(shù)input能輸入一個字符串: x=input( Enter anything , s ) Enter anything anything can be entered x = anything can be entered 這里,在函數(shù)input里的附加參量s告訴MATLAB,作為一個字符串,只要把用戶輸入傳送到輸出變量,就不

11、需要引號。,如果要直接“執(zhí)行”某一特定字符串,可以使用eval命令,其效果就如同直接在MATLAB命令窗口內(nèi)輸入此一特定字符串,例如: str=x=1 2 3;y=x.2; eval(str) y= 1 4 9 此結(jié)果和從MATLAB命令窗口內(nèi)直接輸入的執(zhí)行的結(jié)果一致,例如: x=1 2 3;y=x.2 y= 1 4 9,可以用class命令或ischar命令來判斷某一個變量是否為字符串,例如: class(Chinese) 返回值char,代表變量Chinese是字符串變量 ans= char ischar(x) 返回值0,代表變量x不是一個字符串變量 ans= 0,strcmp命令用于比較

12、字符串內(nèi)容的異同,例如: strl=today; str2=tomorrow; str3=today; strcmp(strl,str2) 比較兩字符串strl和str2 ans= 0 strcmp(strl,str3) % 比較兩字符串strl和str3 ans= 1 提示:strcmp命令執(zhí)行結(jié)果返回值為0,表示str和str2內(nèi)容不相等,返回值為1,表示str1和tr3內(nèi)容相等。在C語言中,strcmp命令也用于字符串比較,但在兩字符串相等時,返回值是0,這和MATLAB的strcmp命令剛好相反。,stmcmp命令用于比較字符串的前n個字符,例如: strncmp(strl,str2,

13、2) 比較strl及str2兩字符串的前n個字符 ans= 1 strcmp及strncmp命令也可用于字符串異質(zhì)數(shù)組,例如: A=北京,上海,廣州; 建立字符串異質(zhì)數(shù)組A B=北京,寧波,深圳; 建立字符串異質(zhì)數(shù)組B strcmp(A,B) 比較字符串異質(zhì)數(shù)組A與B是否相同 ans= 1 0 0 strncmp(A,B,1) 比較字符串異質(zhì)數(shù)組A與B的第一個字符是否相同 ans= 1 0 0,findstr命令可以尋找在某一個長字符串中的子字符串(Substrings),并返回其起始位置,例如: string=我最喜歡的運動是網(wǎng)球; pattern=網(wǎng)球; position=findstr(

14、string,pattern) position= 9,strrep命令用于字符串尋找及代換,例如: pattern2=藍(lán)球; newstring=strrep(string,pattern,pattern2) newstring= 我最喜歡的運動是藍(lán)球,strtok命令可根據(jù)一給定的分界字符,將一字符串拆解成數(shù)個字符串,默認(rèn)的分界字符為空格符,例如: Input_string=ee cs econ stat me; remainder=Input_string; parsed= 建立空字符數(shù)組 while (any(remainder) chopped,remainder=strtok(re

15、mainder); parsed=strvcat(parsed,chopped); end parsed parsed= ee cs eeon stat me 提示:在上例中,strvcat命令的作用是將拆解下來的字符串內(nèi)容(即儲存在字符串變量chopped中)加到二維字符數(shù)組parsed中。,5.3 字符串轉(zhuǎn)換,int2str命令可將整數(shù)類型的數(shù)據(jù)轉(zhuǎn)換成字符串?dāng)?shù)據(jù),例如: x=13862; y=int2str(x) 整數(shù)類型的數(shù)據(jù)轉(zhuǎn)換成字符串?dāng)?shù)據(jù) 在上例中,原先變量x儲存一個整數(shù)13862,int2str命令將其轉(zhuǎn)換成一個字符串13462,其長度為5個字符。,要將實數(shù)轉(zhuǎn)為字符串,可用num2

16、str命令,例如: str=num2str(pi) 實數(shù)轉(zhuǎn)為字符串 str= 3.1416 若要增加有效位數(shù),可加入另一參數(shù),例如: str=num2str(pi,lO) str= 3.141592654,int2str及num2str常用于標(biāo)示坐標(biāo)點的值,例如:若要在y=sin(x)的圖形上,標(biāo)出當(dāng)x=2.5的坐標(biāo)值(如圖所示),可輸入如下: x=0:0.1:2*pi; y=sin(x); plot(x,y) str=leftarrow(,num2str(2.5),num2str(sin(2.5),); text(2.5,sin(2.5),str);,dec2hex命令可將十進(jìn)制數(shù)值數(shù)據(jù)轉(zhuǎn)換

17、成十六進(jìn)制的字符串表示法,例如: x=1026; y=dec2hex(x) y= 402 請注意在上例中,變量x儲存數(shù)據(jù)類型為數(shù)值,而變量y儲存數(shù)據(jù)類型為字符串。類似的命令還有hex2num、hex2dec、dec2hex、bin2dec、dec2bin、base2dec等,請用help命令查閱各自使用語法的詳細(xì)說明。,mat2str命令可將矩陣轉(zhuǎn)換為字符串,此字符串經(jīng)過eval命令,可再變回原先的矩陣,例如: A= 1 2 1;3 5 6; B=mat2str(A); A1=eval(B); B B= 1 2 l;3 5 6 A1 Al= l 2 l 3 5 6 A= Al ans= l l

18、 1 1 l 1 在上例中,mat2str命令已將為2*3的數(shù)值矩陣A轉(zhuǎn)換變成二維字符串?dāng)?shù)組B,然后再對此二維字符串?dāng)?shù)組B使用eval命令,產(chǎn)生一個與轉(zhuǎn)換前的矩陣A相同內(nèi)容的矩陣A1。,sprintf命令可結(jié)合數(shù)值或字符串,以產(chǎn)生新字符串,例如: str=圓周率; newstr=sprintf(%s是%g,str,pi) newstr= 圓周率是3.14159 其中s代表印出字符串,g代表印出數(shù)值,也可使用f或加上控制印出位數(shù)大小的數(shù)字等,以精確地控制產(chǎn)生的字符串格式,詳情請查閱help sprintf的說明。,sscanf可按給定的格式來解析出所要的字符串或數(shù)值,例如: str=2 4.7 5.2; mat=sscanf(str,f) mat= 2.0000 4.7000 5.2000,函數(shù)fprintf經(jīng)常是函數(shù)disp的一個有用替換,由于它提供了對結(jié)果更多的控制。當(dāng)準(zhǔn)備把格式化的數(shù)據(jù)寫到一個文件中去時,按缺省它在命令窗口顯示結(jié)果。例如, fprintf(See what this doesn ) See what this does 當(dāng)把格式化數(shù)據(jù)寫到磁盤時,可采用系列方式: x = 0:.1:1; y = x; exp(x); fid = fopen(exp.txt, wt); fprintf(fid, %6.2f %12.8fn, y); fclose(fi

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論