凯撒密码程序

时间:2017-10-16 19:48:30

标签: c++

到目前为止,我有这个

 #include <iostream>
 using namespace std;


string encryptText(string plaintext, int rshift)
{
    string t;

    for (int i=0;i<plaintext.length();i++)
    {

        if (islower(plaintext[i]))
            t += char(int(plaintext[i]+rshift-97)%26 +97);

        else if (isupper(plaintext[i]))
            t += char(int(plaintext[i]+rshift-65)%26 +65);
        else
            t;
    }

    return t;
}


int main()

{ 

    string plaintext, t;
    int rshift;

    cout << "enter the plaintext\n";
    getline (cin,plaintext);

    cout << "enter the right shift number\n";
    cin >> rshift;

    cout << encryptText (plaintext, rshift)<< endl;
}

问题是我的程序不包含用户输入的空格(明文)。此外,它确实包括特殊的字符。例如,如果我输入

Hello World! 

右移10,我应该

Rovvy Gybvn!

但我得到了

RovvyGybvn

1 个答案:

答案 0 :(得分:1)

您的else阻止应为:

else
{
    t += plaintext[i];
}

如果字符不是字母,则不会附加到字符串。使用plaintext[i] == '!'运行您的代码。