版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 暗物質(zhì)助力打造未來商業(yè)新模式
- 生態(tài)辦公空間設(shè)計-以室內(nèi)綠植為元素的辦公室改造實踐
- 2025年度臨建板房租賃與室內(nèi)裝飾一體化服務(wù)合同4篇
- 二零二五年度大數(shù)據(jù)分析與應(yīng)用服務(wù)合同集錦4篇
- 2025版新能源項目投資合作協(xié)議范本3篇
- 基于2025年度云計算平臺建設(shè)合同3篇
- 個人信用抵押借款合同(2024版)版B版
- 二零二五年度大學(xué)生國際交流資助借款合同4篇
- 二零二五年度公共交通設(shè)施承包商借款協(xié)議書4篇
- 二零二五版辦公室裝修與辦公家具定制采購協(xié)議2篇
- 《酸堿罐區(qū)設(shè)計規(guī)范》編制說明
- 橋梁監(jiān)測監(jiān)控實施方案
- 書籍小兵張嘎課件
- 藝術(shù)哲學(xué):美是如何誕生的學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 北京海淀區(qū)2025屆高三下第一次模擬語文試題含解析
- 量子醫(yī)學(xué)治療學(xué)行業(yè)投資機(jī)會分析與策略研究報告
- 多重耐藥菌病人的管理-(1)課件
- (高清版)TDT 1056-2019 縣級國土資源調(diào)查生產(chǎn)成本定額
- 環(huán)境監(jiān)測對環(huán)境保護(hù)的意義
- 2023年數(shù)學(xué)競賽AMC8試卷(含答案)
- 2023年十天突破公務(wù)員面試
評論
0/150
提交評論