C++ 入門指南 4.01
encrypt.cxx
// 引入標準程式庫中的 cstdlib 及 ctime #include <cstdlib> // srand(), rand() #include <ctime> // time() // 引入 Encrypt 類別的標頭檔 #include "encrypt.h" // Encrypt 的建構函數 Encrypt::Encrypt() { // 呼叫 setter 設定 code_array set_code_array(); } // 設定 code_array 的 setter 成員函數 void Encrypt::set_code_array() { // 設定擬隨機數的種子 srand(time(0)); // 取得 a 、 b 值 int a = 0; int b = 0; while (a % 2 == 0) { a = rand() % 10; b = rand() % 10; } // 利用公式建立密碼表字串 int x, y, m; char r; char c = 'a'; string s; int i; for (i = 0; i < N; i++) { x = c; y = x * a + b; m = y % N; s += (char) m + DIFF; c++; } // 將建立好的密碼表直接設定給成員變數 code_array = s; } // 由參數字串設定密碼表 void Encrypt::set_code_array(string s) { code_array = s; } // 回傳密碼表字串的 getter 成員函數 string Encrypt::get_code_array() { return code_array; } // 進行編碼工作的成員函數 string Encrypt::ToEncode(string s) { // 由參數字串取得字元的暫存變數 char c; // 暫存編碼結果的字串 string r; int i, m; // 利用迴圈走完參數字串的所有字元 for (i = 0; i < s.size(); i++) { // 判斷該字元是否為英文小寫字母,若是英文小寫字母就進行編碼轉換 if (s.at(i) >= DIFF && s.at(i) < DIFF + N) { c = s.at(i); m = c - 97; r += get_code_array().at(m); } else { r += s.at(i); } } // 結束回傳編碼過的字串 return r; } // 進行解碼工作的成員函數 string Encrypt::ToDecode(string s) { // 暫存解碼結果的字串 string r; int i, j; // 第一層迴圈逐一取得每一個字元 for (i = 0; i < s.size(); i++) { // 判斷該字元是否為英文小寫字母,若是英文小寫字母就進行解碼轉換 if (s.at(i) >= DIFF && s.at(i) < DIFF + N) { // 第二層迴圈尋找該字元在密碼表中的索引值 // 該索引值加上 DIFF 就可轉換回原本的字元 for (j = 0; j < N; j++) { if (s.at(i) == get_code_array().at(j)) { r += (char) j + DIFF; break; } } } else { r += s.at(i); } } // 結束回傳解碼過的字串 return r; } /* 《程式語言教學誌》的範例程式 http://kaiching.org/ 檔名:encrypt.cxx 功能:Encrypt 類別的標頭檔 作者:張凱慶 */
相關教學影片