Matlab 內建字串 (string) 資料型態,也提供一些字串的處理函式。 只要說
s = 'Hello, world.'就建立了一個字串型態的變數,它的值是 Hello, world. 這個字串, 不包含前後兩個單引號。試試看
ischar(s)得到回應 1,意思是說 s 是 (True) 一個字串。 試試看
t = [67 111 111 108 33]得到回應 0,意思是說 t 不是 (False) 一個字串。 很顯然地,Matlab 將 t 視為一個以 6 個數組成的序列。
ischar(t)
事實上,不論 s 還是 t 其實本質上都是正整數所組成的序列, 只是 Matlab 記得要用字碼的意義來解讀 s 序列中的數, 而用數值的意義來解讀 t 序列中的數。 試試看
size(s)分別知道 s 的維度是 13 而 t 的維度是 5。
size(t)
double( ) 函式將序列元素的字串意義轉換成數值意義,例如
double(s)得到 13 個數
72 101 108 108 111 44 32 119 111 114 108 100 46讀者稍微檢查一下,就會發現這 13 個數依序是 Hello, world. 的 ASCII 字碼。
反過來,char( ) 函式將序列元素的數值意義轉換成字串意義,例如
t = char(t)得到字串 Cool!。
若 n 是一個介於 0 和 127 之間的整數,則
char(n)將 n 視為字碼,而企圖印出對應該字碼的符號。 至於 Matlab 印出什麼字型的什麼符號,則由作業系統決定。 char( ) 的輸入數值,必須符合 ASCII 字符 (printable) 碼位的規則, 才會有正常的反應。否則可能產生不堪設想的後果, 千萬不要亂來。
如果 char( ) 的輸入是一個向量或序列,則相當於將 char( ) 作用在每個元素上。 例如
char( 64+(1:26) )就依序印出 ASCII 編號 65, 66, ..., 90 的字元,也就是 26 個大寫的英文字母。 若是說
char( double('A') + (0:25) )效果也一樣。
接續前面的練習,若 s 和 t 已經是兩個字串,則
H = [s t]會將 s 和 t 接起來形成一個新的字串 H。 可是 Matlab 不會自動加空格,因此 H 的值是
Hello, world.Cool!這樣不好看。我們可以用
H = [s ' ' t]在 s 和 t 之間塞兩個空格,也可以用
H = [s blanks(2) t]達到同樣的效果。
若 n 是一個正整數,blanks(n) 就產生 n 個空格的字串。 有時候我們需要利用空格來排版對齊一些字串, 這個 blanks( ) 函式還蠻好用的。
習題