Swift 入門指南 V1.00 - 單元 19 - 解碼
- Get link
 - X
 - Other Apps
 
Swift 入門指南 V1.00 - 單元 19 - 解碼

解碼 (decoding) 需要用到與編碼相同的轉換表格

解碼也就是把編碼 (encoding) 過程反過來,如上圖原本的 'h' 編碼成了 'b' ,然後 'e' 編碼成了 'a' 等等,現在是要把 'b' 變回 'h' , 'a' 變回 'e' 。
實際上我們的表格是餘數陣列 (array) ,這裡仍是採字元的方式講解。
例如上一個單元編碼過的字串
| "Tinan ph yf huffy." | 
同樣的,我們用迴圈 (loop) 逐一檢查每個字元,以 isLowercase() 判斷該字元是否為英文小寫字母,如果是英文小寫字母就進行解碼轉換,第一步是要找到該字元在餘數陣列中的索引值,這項工作交給 findCodeIndex() 來完成
| // 由字元從密碼表中找到索引值 | 
func findCodeIndex(chr: Character) -> Int {  | 
| var n = findAlphabetIndex(chr) | 
| var i = 0 | 
| for d in code { | 
| if d == n { | 
| return i | 
| } | 
| i++ | 
| } | 
| return -1 | 
| } | 
完整程式請參考「範例程式篇」的 Encrypt.swift 。
findCodeIndex() 先找到檢測字元在字母表中的序數,然後比對密碼表餘數陣列的元素值,找到相同的就回傳索引值,接著再透過 findLetter() 取得字母表中對應的字元
| // 由索引值找到字母表中對應的字元 | 
func findLetter(index: Int) -> Character {  | 
| var i = 0 | 
| for s in alphabet { | 
| if i == index { | 
| return s | 
| } | 
| i++ | 
| } | 
|    return Character("") | 
| } | 
toDecode() 的設計跟 toEncode() 類似,如下
| // 進行解碼的方法 | 
func toDecode(str: String) -> String {  | 
|    var newStr = "" | 
| for chr in str { | 
| if isLowercase(chr) { | 
| newStr.append(findLetter(findCodeIndex(chr))) | 
| } | 
| else { | 
| newStr.append(chr) | 
| } | 
| } | 
| return newStr | 
| } | 
延續上一個單元的測試,在 Playground 的結果如下

編碼與解碼功能大體完備,下一個單元我們開始離開 Playground ,改用命令列專案來執行 Encrypt 類別。
中英文術語對照
| 解碼 | decoding | 
| 編碼 | encoding | 
| 陣列 | array | 
| 迴圈 | loop | 
訂閱:
張貼留言 (Atom)
window.___gcfg = { 'lang': 'zh-TW' };
- Get link
 - X
 - Other Apps
 

沒有留言:
張貼留言