Swift 入門指南 V1.00 - 單元 19 - 解碼





































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







沒有留言:




















window.___gcfg = { 'lang': 'zh-TW' };





Popular posts from this blog

迅雷 Thunder 7.9.43.5054 免安裝版 (9.1.41.914 安裝版) - 支援BT下載的萬用 檔案下載工具

Nhiều đồn đoán cho rằng bộ đồ "phá vỡ quy tắc" của Meghan Markle được lấy cảm hứng từ trang phục của Công nương Diana

Cụ ông 92 tuổi gào khóc vì mất hết tiền tiết kiệm cả đời, càng cay đắng hơn khi kẻ trộm là đứa cháu trai 34 tuổi