Matlab 教材:字串

Matlab 內建字串 (string) 資料型態,也提供一些字串的處理函式。 只要說

s = 'Hello, world.'
就建立了一個字串型態的變數,它的值是 Hello, world. 這個字串, 不包含前後兩個單引號。試試看
ischar(s)
得到回應 1,意思是說 s 是 (True) 一個字串。 試試看
t = [67 111 111 108 33]
ischar(t)
得到回應 0,意思是說 t 不是 (False) 一個字串。 很顯然地,Matlab 將 t 視為一個以 6 個數組成的序列。

事實上,不論 s 還是 t 其實本質上都是正整數所組成的序列, 只是 Matlab 記得要用字碼的意義來解讀 s 序列中的數, 而用數值的意義來解讀 t 序列中的數。 試試看

size(s)
size(t)
分別知道 s 的維度是 13 而 t 的維度是 5。

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) )
效果也一樣。

接續前面的練習,若 st 已經是兩個字串,則

H = [s t]
會將 st 接起來形成一個新的字串 H。 可是 Matlab 不會自動加空格,因此 H 的值是
Hello, world.Cool!
這樣不好看。我們可以用
H = [s '  ' t]
st 之間塞兩個空格,也可以用
H = [s blanks(2) t]
達到同樣的效果。

若 n 是一個正整數,blanks(n) 就產生 n 個空格的字串。 有時候我們需要利用空格來排版對齊一些字串, 這個 blanks( ) 函式還蠻好用的。

習題

  1. 利用 Matlab 函式印出 ASCII 編號 32--126 的字集, 一共印 6 列,每列 16 個字符 (最後一列 15 個), 兩個字符之間以 4 個空格隔開。
單維彰 (2001/10/31) --- 2004/01/02 [Prev] [Next] [Up]