
解碼 (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 |
1 則留言:
Sands Casino
The Sands Casino is a casino located in 카지노사이트 San Francisco, CA. It 인카지노 has a total of 650 slot machines, over 30 table games, a variety septcasino of live table games,
張貼留言