C ++中的Codebook

时间:2018-02-23 13:35:11

标签: c++ encryption

尝试用C ++为小孩子创建一个码本。只是一个字母切换算法,它们提供输入,我把它放入并相应加密或解密。

这是我到目前为止编写的代码,但是replace函数每次都会更改所有字符串而不是一次。

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main()
{
string message, decision;
int number;
cout << "Hello! What is your message?" << endl;
cin >> message;
cout << "\n";
cout << "How are you changing your message? (e/d)" << endl;
cin >> decision;
cout << "\n";
cout << "Which way will you do that?" << endl;
cin >> number;

if(decision == "e"){
    if(number == 1){
        cout << "e_one" << endl;
        replace( message.begin(), message.end(), 'a', 'n' );
        replace( message.begin(), message.end(), 'b', 'o' );
        replace( message.begin(), message.end(), 'c', 'p' );
        replace( message.begin(), message.end(), 'd', 'q' );
        replace( message.begin(), message.end(), 'e', 'r' );
        replace( message.begin(), message.end(), 'f', 's' );
        replace( message.begin(), message.end(), 'g', 't' );
        replace( message.begin(), message.end(), 'h', 'u' );
        replace( message.begin(), message.end(), 'i', 'v' );
        replace( message.begin(), message.end(), 'j', 'w' );
        replace( message.begin(), message.end(), 'k', 'x' );
        replace( message.begin(), message.end(), 'l', 'y' );
        replace( message.begin(), message.end(), 'm', 'z' );
        replace( message.begin(), message.end(), 'n', 'a' );
        replace( message.begin(), message.end(), 'o', 'b' );
        replace( message.begin(), message.end(), 'p', 'c' );
        replace( message.begin(), message.end(), 'q', 'd' );
        replace( message.begin(), message.end(), 'r', 'e' );
        replace( message.begin(), message.end(), 's', 'f' );
        replace( message.begin(), message.end(), 't', 'g' );
        replace( message.begin(), message.end(), 'u', 'h' );
        replace( message.begin(), message.end(), 'v', 'i' );
        replace( message.begin(), message.end(), 'w', 'j' );
        replace( message.begin(), message.end(), 'x', 'k' );
        replace( message.begin(), message.end(), 'y', 'l' );
        replace( message.begin(), message.end(), 'z', 'm' );
        cout << message << endl;
    }
  if(number == 2){
        cout << "e_two" << endl;
    }
    if(number == 3){
        cout << "e_three" << endl;
    }
    if(number == 4){
        cout << "e_four" << endl;
    }
    if(number == 5){
        cout << "e_five" << endl;
    }
}

if(decision == "d"){
    if(number == 1){
        cout << "d_one" << endl;
    }
    if(number == 2){
        cout << "d_two" << endl;
    }
    if(number == 3){
        cout << "d_three" << endl;
    }
    if(number == 4){
        cout << "d_four" << endl;
    }
    if(number == 5){
        cout << "d_five" << endl;
    }
}
cin.get();
return 0;
}

如果我输入以下字符串 input = 'abcdefghijklmnopqrstuvwxyz' 运行算法后,我得到以下输出: output = 'abcdefghijklmabcdefghijklm' 而这正是我希望得到的输出,但出于水的原因,我无法弄清楚如何做到这一点。 expected output = 'nopqrstuvwxyzabcdefghijklm'

请让我知道如何解决这个问题,以便让它像我希望的那样工作。

1 个答案:

答案 0 :(得分:0)

我们暂时忽略风格和复杂性,只关注你的问题。你有这个代码:

// …
replace( message.begin(), message.end(), 'a', 'n' );
// … lots of other stuff …
replace( message.begin(), message.end(), 'n', 'a' );
// …

...希望这可以解决问题。