2017-10-16 131 views
-4

到目前爲止,我有這個凱撒密碼程序

#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 
+4

「*我應該得到Rovvy Gybvn !. bu而不是我得到Rovvy Gybvn!*」 - ? – Fureeish

+2

'else t;'什麼都不做。 – 2017-10-16 19:54:21

+1

無關:使用'rshift-'a''而不是'rshift-97'。 1.更容易推斷意圖。 2.它可以移植到更多種類的字符集中。 – user4581301

回答

1

else塊應該是:

else 
{ 
    t += plaintext[i]; 
} 

如果字符i不是一個字母,它不會被附加到字符串中。通過plaintext[i] == '!'運行您的代碼。

+0

如果我想解密代碼,以便用戶輸入加密的文本,程序輸出實際的句子,我該怎麼辦?我嘗試了一下,但沒有成功。 – suhdud

+0

要解密代碼,請在使用'%'之前添加'(26 - rshift)'。用調試器或計算器試一試。 –