Matlab 教材:字串處理

如果 s 是一個字串意義的序列, 則 isletter(s) 針對每個字元一一檢查它是否為一個英文字母。 例如

s = 'Hello, world.';
isletter(s)
得到回應
1 1 1 1 1 0 0 1 1 1 1 1 0
可見 Hello 和 world 被視為字母,而標點符號和空格不是字母。

類似 isletter( ) 函式,isspace( ) 則檢查字元是否為『空白』; 所謂的『空白』包括空格 (space)、跳格 (tab)、LF 和 CR 符號。 請讀者自己試試看

isspace(s)

Matlab 還提供一套字串處理函式, 這些函式與 C 語言在 string.h 內定義的字串處理函式非常類似。 這些函式已經不是一般使用者需要知道的,所以留在以後再說, 或者請讀者參考

help strings
顯示的線上手冊。不過,我們在此要再用兩個例子來提醒讀者, 處理中文字串的時候要注意的事情。

Matlab 的 upper( ) 和 lower( ) 兩個函式將英文字母換成大寫、 或者換成小寫。 例如接續前面定義的 s 字串,則

upper(s)
回應 HELLO, WORLD. 這兩個指令不會影響非英文字母的字元。

如果說

p = '我好喜歡 Matlab';
upper(p)
就會回應「我好喜歡 MATLAB」字串,顯示 Matlab 知道「我好喜歡」不是英文字母。 那是因為 Matlab 已經將 Big-5 的首碼和次碼合併成一個數, 它就知道那不是英文字母。 但是,如果您直接輸入 Big-5 碼,例如
p = [167 218 166 110 179 223 197 119 32 77 97 116 108 97 98];
p = char(p)
還是會看到「我好喜歡 MATLAB」字串, 但是這時候 Matlab 就無法分辨 Big-5 中國字和 ASCII 英文字母了。 注意 都是小寫英文字母。 所以,這時候如果說
upper(p)
就糟糕了,110 被換成 110 - 32 = 78 也就是 'N', 而 119 被換成 119 - 32 = 87 也就是 'W', 然後就顯示了「我吉喜饗 MATLAB」!

習題

  1. 請查詢 sprintf( ) 的用法。 並練習利用它來印出一張表格, 表格內顯示 Big-5 字集中首碼為 165, 次碼在 64 與 126 之間的所有中國字, 以及它們的 Big-5 碼。
單維彰 (2004/01/02) --- [Prev] [Next] [Up]