尝试用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'
请让我知道如何解决这个问题,以便让它像我希望的那样工作。
答案 0 :(得分:0)
我们暂时忽略风格和复杂性,只关注你的问题。你有这个代码:
// …
replace( message.begin(), message.end(), 'a', 'n' );
// … lots of other stuff …
replace( message.begin(), message.end(), 'n', 'a' );
// …
...希望这可以解决问题。