matlab處理字串的一些函式

2021-06-03 02:16:42 字數 3541 閱讀 7579

字串和它的ascii表示之間轉換外,

matlab還提供了大量的其它的有用的字串轉換

函式。它們包括:

表6.1

字  符  串  轉  換

abs字串到ascii轉換

dec2hex

十進位制數到十六進製制字串轉換

fprintf 把

格式化的文字寫到

檔案中或顯示屏上

hex2dec

十六進製制字串轉換成十進位制數

hex2num

十六進製制字串轉換成ieee浮點數

int2str

整數轉換成字串

lower

字串轉換成小寫

num2str

數字轉換成字串

setstr

ascii轉換成字串

sprintf

用格式控制,數字轉換成字串

sscanf

用格式控制,字串轉換成數字

str2mat

字串轉換成乙個文字

矩陣str2num

字串轉換成數字

upper

字串轉換成大寫

在許多情況下,希望把乙個數值嵌入到字串中。幾個字串轉換可完成這個任務。

» rad=2.5;  area=pi*rad^2;

» t=[' a circle of radius '  num2str(rad)  ' has an area of ' num2str(area)  ' . ' ] ;

» disp(t)

a circle of radius 2.5  has an area of  19.63.

這裡函式num2str用來把數值轉換成字串,字串連線用來把所轉換的數嵌人到乙個字串句子中。按類似方式,int2str把整數轉換成字串。無論是num2str還是int2str都

呼叫函式sprintf,它用類似c語言語法把數值轉換成字串。

函式fprintf經常是函式disp的乙個有用替換,由於它提供了對

結果更多的控制。當準備把格式化的

資料寫到乙個檔案中去時,按預設它在

命令視窗顯示結果。例如,

» fprintf(' see what this does ')

see what this does» 

» fprintf(' see what this does\n ')

see what this does

在上面第乙個例子裡,fprintf顯示字串,然後立即給出matlab提示符。相反,在第二個例子裡,\n 插入乙個新行字元,在matlab提示符出現之前建立乙個新行。

無論fprintf還是sprintf以同樣方式處理

輸入參量,但fprintf把

輸出送到顯示屏或檔案中,而sprintf把輸出返回到乙個字串中。例如,上面的例子用num2str可重寫為

» t=sprintf(' a circle of radius %.4g has an area of %.4g. ', rad, area);

» disp(t)

a circle of radius 2.5 has an area of 19.63.

» fprintf(' a circle of radius %.4g has an area of %.4g.\n ' , rad, area)

a circle of radius 2.5 has an area of 19.63.

這裡%.4g是用在函式num2str中的資料格式。%.4g就是用指數或定點標記,不管哪一種更短些,只顯示至4位數字。除了g格式,還可用e (指數)和f (定點)轉換。表6.2表明在各種不同轉換下,如何顯示pi結果。

表6.2

數  值  格  式  轉  換  例  子 命令

結果fprintf(' %.0e\n ',pi)

3e+00

fprintf(' %.1e\n ',pi)

3.1e+00

fprintf(' %.3e\n ',pi)

3.142e+00

fprintf(' %.5e\n ',pi)

3.14159e+00

fprintf(' %.10e\n ',pi)

3.1415926536e+00

fprintf(' %.0f\n ',pi) 3

fprintf(' %.1f\n ',pi)

3.1fprintf(' %.3f\n ',pi)

3.142

fprintf(' %.5f\n ',pi)

3.14159

fprintf(' %.10f\n ',pi)

3.1415926536

fprintf(' %.0g\n ',pi) 3

fprintf(' %.1g\n ',pi) 3

fprintf(' %.3g\n ',pi)

3.14

fprintf(' %.5g\n ',pi)

3.1416

fprintf(' %.10g\n ',pi)

3.141592654

fprintf(' %.8.0g\n ',pi) 3

fprintf(' %.8.1g\n ',pi) 3

fprintf(' %.8.3g\n ',pi)

3.14

fprintf(' %.8.5g\n ',pi)

3.1416

fprintf(' %.8.10g\n ',pi)

3.141592654

注意,對e 和f 格式,小數點右邊的十進位制數就是小數點右邊要顯示的多少位數字。相反,在g 的格式裡,小數點右邊的十進位制數指定了顯示數字的總位數。另外,注意最後的五行,其結果指定為8個字元長度,且是右對齊。在最後一行,8被忽略,因為指定超過了8位。

概括起來,當需要比預設函式disp,num2str和int2str所提供的更多的控制時,fprintf和sprintf是有用的。

函式str2mat把一列的幾個字串轉換成乙個字串矩陣。例如,

» a=' one ' ; b= ' two ' ; c= ' three ' ;

» disp(str2mat(a, b, c, ' four '))

one  

two  

three

four

從上面看不明顯,上面的每行有同樣數目的

元素。較短行用空格補齊,使結果形成乙個有效的矩陣

在逆方向轉換中,有時是很方便的。

» s= ' [1  2; pi  4] '     %  a string of a matlab matrix

s =[1  2; pi  4]

» str2num(s)

ans =

1.0000    2.0000

3.1416    4.0000

» s=' 123e+5 '      %  a string containing a ****** number

s =123e+5

» str2num(s)

ans =

12300000

函式str2num不能接受使用者

定義的變數,也不能執行轉換過程的算術運算。

字串處理的一些應用

1 牛牛喜歡彩色的東西,尤其是彩色的瓷磚。牛牛的房間內鋪有l塊正方形瓷磚。每塊磚的顏色有四種可能 紅 綠 藍 黃。給定乙個字串s,如果s的第i個字元是 r g b 或 y 那麼第i塊瓷磚的顏色就分別是紅 綠 藍或者黃。牛牛決定換掉一些瓷磚的顏色,使得相鄰兩塊瓷磚的顏色均不相同。請幫牛牛計算他最少需要...

C 一些字串處理函式

1.複製函式 我更願意稱之為 字串覆蓋函式 a.strcpy str1,str2 將字串str2 覆蓋到str1上 b.strncpy str1,str2,n 2.拼接函式 a.strcat str1,str2 將str2接到str1後面 b.strncat str1,str2,n 3.比較函式 a...

一些字串處理函式的實現!

最近剛學完陣列,把一些學了的字串處理函式進行自己理解,寫出了他們的一些轉化程式。有出錯的地方請大家指出,相互學習!size t strcat char str1,const char str2 將引數 str2追加到 str1後尾 include include strcat字串追加的實現 int ...