1. 程式人生 > >ASCII字元隨機混淆字典的生成

ASCII字元隨機混淆字典的生成

    有些時候出於不可告人的目的,我們可能希望把某些字元1對1地對映到另一個字元。比如'0'用'1'代替,'1'用'2'代替……。這個一般用混淆字典和其對偶字典就可以很高效(都是O(1))的搞定。不過我下午發現構造混淆字典很容易,構造其對偶字典則很痛苦,腦筋糾結,於是一咬牙一跺腳寫了個程式來幹這件事情。寫完後發現不知道該把程式碼放哪,於是乾脆貼在blog上備忘。

========================程式碼的分割線============================
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

//    gene dicts to map [min-max] to [min-max] and against
void geneDict(int min, int max)
{   
    int cnt = max - min + 1;
    if (cnt <= 0)
    {
        return;
    }
    //    initial
    int* dict = new int[cnt];
    int* agDict = new int[cnt];
    for (int i = 0; i < cnt; i++)
    {
        dict[i] = min + i;
    }
    //    random arrange algo
    srand((unsigned)time(NULL));
    for (int i = 0; i < cnt; i++)
    {       
        int swap_pos = rand() % cnt;
        if (i != swap_pos)
        {
            int tmp = dict[i];
            dict[i] = dict[swap_pos];
            dict[swap_pos] = tmp;
        }
    }
    //    get against dict
    for (int i = 0; i < cnt; i++)
    {   
        agDict[dict[i] - min] = i + min;
    }
    //    print
    cout << "char FUZZY_DICT[] = {";
    for (int i = 0; i < cnt; i++)
    {
        if (i != 0)
        {
            cout << ", ";
        }
        cout << "'" << ((char)dict[i]) << "'";
    }
    cout << "};" << endl;
    cout << "char DEFUZZY_DICT[] = {";
    for (int i = 0; i < cnt; i++)
    {
        if (i != 0)
        {
            cout << ", ";
        }
        cout << "'" << ((char)agDict[i]) << "'";
    }