MATLAB字串轉換函式
除了上面討論的,字串和它的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.1
fprintf(' %.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 simple number
s =
123e+5
» str2num(s)
ans =
12300000
函式str2num不能接受使用者定義的變數,也不能執行轉換過程的算術運算。更多的資訊,