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

VPN Gate Client 4.27.9668 (201805030) 簡體中文版 - 不限流量免費VPN軟體 手機可用公共VPN中繼伺服器

JavaScript 入門指南 - 完成版的 Encode Software

Tình cờ gặp nhau 3 lần trên một chuyến xe, tài xế bus kết hôn với nữ hành khách vì "có duyên phận"