解碼 (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,
張貼留言