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

Mái uốn xoăn như “bà thím” vẫn được loạt sao Hàn yêu thích, nhờ sự thay đổi này mà ai cũng trẻ trung hơn hẳn

Cô bé "The Voice Kids Anh" nhận ngay nút vàng tại "Got Talent Mỹ" với màn trình diễn quá đáng yêu

qBittorrent 4.1.1 免安裝中文版 - 取代uTorrent的BT下載器