Part 1
- 設計一個函數 captalize.m,其用法如下:
outputStr = capalize(inputStr) 其中 inputStr 是一個輸入英文字串,函數 captalize 會將此字串中,每個字(Word)的第一個字母改成大寫,其餘則為小寫,並將多個空格代換成一個空格,outputStr 則是最後的輸出字串。例如,當輸入是 'you are My sunshine' 時,所得到的輸出字串是 'You Are My Sunshine'。
- 請寫一個函數 isbig5.m,可以判斷給定的字串中,有哪幾個字元是屬於大五碼的常用字。例如 isbig5('我是Roger') 應該傳回的答案是 [1 1 0 0 0 0 0],代表前兩個字元是大五碼常用字,而後五個字元不是。請注意:常用的大五碼的內碼範圍是介於(含) 'A440' 和 'C67E' 之間。
- 請寫一個函數 split.m,可以將一個字串,依照給定的分界字元(Delimiter),猜解成一個字串異值陣列,其用法如下:
outputStr = split(string, delimiter) 其中 string 是輸入字串,delimiter 是分界字元,輸出 output 則是一個由字串形成的異值陣列。例如,split('This-is-a-test', '-') 所產生的結果是 {'This', 'is', 'a', 'test'}。
- 中文的大五碼是由兩個位元組所構成,但不幸的是,在當初編碼的過程中,可能考慮欠周詳,因此把「直槓」("|")也編成某些字的大五碼的一部份,因此造成在自串處理上的極大不方便。(例如 Perl 的 Regular Expressions 碰到含有一直槓的大五碼就會出問題;使用 ODBC 來執行 SQL Command 時,若碰到含有一直槓的大五碼,也會出問題。此外,若用這些出問題的大五碼來當檔案或目錄名稱,則在使用 FTP 來進行檔案傳輸時,也會遇到麻煩而無法傳輸。)請寫一段 MATLAB 程式 big5withVerticalBar.m,來印出含有一直槓的所有中文字。 請問共有幾個這樣的中文字?請注意:常用的大五碼的內碼範圍是介於(含) 'A440' 和 'C67E' 之間。
- 同樣的,如果大五碼的中文字包含「反斜線」("\"),也會出現許多問題。請仿造上一題,寫一個 MATLAB 程式 big5withBackSlash.m,列出所有包含反斜線的大五碼中文字。共有幾個?(做完這題之後,你就會知道為什麼許如芸和許志安的 MP3 歌曲檔案名稱,都不會出現「許」這個字了!)
- 請寫一個 MATLAB 函數 rowCount.m,可以計算在一個字串二維陣列中,每一個字串出現的次數,其用法如下: [rows, count] = rowCount(A) 例如,當 A=['cd '; 'ab '; 'abc'; 'ab '; 'cd '; 'ab '; 'de '] 時,所得到的 rows 是 ['ab '; 'cd '; 'de '; 'abc'],count 是 [3; 2; 1; 1],代表在字串陣列 A 中,'ab ' 出現 3 次,'cd ' 出現 2 次,'de ' 出現 1 次,'abc' 出現 1 次。
- 請寫一個 MATLAB 函數 str2ngram.m,可以傳回在一個輸入字串中,所存在的「n-字詞」,其用法如下:
ngramArray = str2ngram(string, n) 當 n = 2 時,此函數可以傳回由「二字詞」(Bigrams,任何相鄰兩個字即構成一個二字詞)所形成的字串陣列,當 n = 3 時,此函數可以傳回由「三字詞」(Trigrams,任何相鄰三個字即構成一個二字詞)所形成的字串陣列,依此類推。例如,str2ngram('網路上的芳鄰', 3) 所傳回的字串陣列是是 ['網路上'; '路上的'; '上的芳'; '的芳鄰']。
- 計算本書光碟片中有一個文字檔案 news.txt,包含了大約六千則新聞。請寫一段 MATLAB 程式 getNgramStat.m, 讀入 news.txt,並列出最常出現的 10 個二字詞及其出現次數,請將結果按出現次數由高而低來印出。請對「三字詞」、「四字詞」及「四字詞」進行類似的運算。(請注意:在進行統計時,這些 n-字詞不能包含大五碼的標點符號,也不能包含英文字母。)
Part 2
- Palindrome: 「迴文」 (Palindrome) 在中文當中是指倒正著念和反著念都相同的句子,前後對稱,例如「上海自來水來自海上」。在英文當中是指正著看和反著看都相同的單字,例如「 madam 」。請寫一個 MATLAB 函數,來決定所給定的字串是否是「迴文」。
- Determine if a path is absolute: 請設計一個函數,可以用來判斷所給定的字串是不是代表一個絕對路徑。例如,'\users\jang' 或 '/windows' 或 'c:\windows' 都是絕對路徑,而 'abc.txt' 或 './abc.txt' 或 '..\abc.txt' 都是相對路徑。
- Convert a given path to be an absolute path: 請設計一個函數,可以用來將所給定的相對路徑轉成一個絕對路徑。
MATLAB程式設計:入門篇