C++ 入門指南 4.01
encrypt_refactor.cxx
// 引入標準程式庫中的 shuffle #include <algorithm> // 引入標準程式庫中的 mt19937 #include <random> // 引入標準程式庫中的 chrono::system_clock #include <chrono> // 引入標準程式庫中相關的 string #include <string> // 引入標準程式庫中的 islower() #include <cctype> // 引入 Encrypt 類別的標頭檔 #include "encrypt_refactor.h" // shuffle 為 std 中的攪亂函數 using std::shuffle; // system_clock 為 std 中的系統時間 using std::chrono::system_clock; // mt19937 為 std 中的擬隨機數產生器 using std::mt19937; // string 為 std 中的字串型態 using std::string; // Encrypt 的建構函數 Encrypt::Encrypt(string s) { // 建立字母表字串 alphabet_array = "abcdefghijklmnopqrstuvwxyz"; // 判斷是否由參數設定密碼表 if (s != "") { code_array = s; } else { // 初始化密碼表字串 code_array = "abcdefghijklmnopqrstuvwxyz"; // 獲取時鐘週期個數 unsigned int seed = system_clock::now().time_since_epoch().count(); // 攪亂整數陣列中的元素順序 shuffle(code_array.begin(), code_array.end(), mt19937(seed)); } } // 設定密碼表字串的 setter 成員函數 void Encrypt::set_code_array(string code) { code_array = code; } // 回傳密碼表字串的 getter 成員函數 string Encrypt::get_code_array() { return code_array; } // 進行編碼工作的成員函數 string Encrypt::ToEncode(string s) { // 由參數字串取得字元的暫存變數 char c; // 暫存編碼結果的字串 string r; // 利用迴圈走完參數字串的所有字元 for (char c: s) { // 判斷該字元是否為英文小寫字母,若是英文小寫字母就進行編碼轉換 if (islower(c)) { r += code_array.at(alphabet_array.find(c)); } else { r += c; } } // 結束回傳編碼過的字串 return r; } // 進行解碼工作的成員函數 string Encrypt::ToDecode(string s) { // 由參數字串取得字元的暫存變數 char c; // 暫存編碼結果的字串 string r; // 利用迴圈走完參數字串的所有字元 for (char c: s) { // 判斷該字元是否為英文小寫字母,若是英文小寫字母就進行編碼轉換 if (islower(c)) { r += alphabet_array.at(code_array.find(c)); } else { r += c; } } // 結束回傳解碼過的字串 return r; } /* 《程式語言教學誌》的範例程式 http://kaiching.org/ 檔名:encrypt_refactor.cxx 功能:Encrypt 類別的標頭檔 作者:張凱慶 */
相關教學影片