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 類別的標頭檔
   作者:張凱慶 */

相關教學影片

上一頁 範例程式篇 encrypt_refactor.h
回 C++ 入門指南 4.01 目錄
下一頁 範例程式篇 encrypt_demo_refactor.cxx
回 C++ 教材
回程式語言教材首頁