2017-10-16 12 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; 
} 

問題を抱えているが、私のプログラムは、ユーザーの入力(平文)から、スペースが含まれていないことです。また、それは特別なcharectersを含んでいます。例えば、私は10の右シフトと入力

Hello World! 

私は

Rovvy Gybvn! 

を取得する必要がありますが、代わりに、私は

RovvyGybvn 
+4

"*私はRovvy Gybvnを取得する必要があります!buの代わりにRovvy Gybvn!*" - ? – Fureeish

+2

'else t;'は何もしません。 –

+1

無関係: 'rshift-97'の代わりに' rshift-aa'を使用してください。 1.それは意図を推測するのが簡単です。 2.より多様なキャラクタセットに移植可能です。 – user4581301

答えて

1

あなたelseブロックがあるべき取得する場合:

else 
{ 
    t += plaintext[i]; 
} 

文字i文字ではなく、文字列に付加されません。 plaintext[i] == '!'でコードを実行します。

+0

ユーザーが暗号化されたテキストを入力し、プログラムが実際の通訳を出力するようにコードを解読したい場合、どうすればよいですか?私はシフトを試みたが、うまくいきませんでした。 – suhdud

+0

コードを解読するには '%'を使う前に '(26 - rshift)'を加えてください。デバッガや電卓で試してみてください。 –

関連する問題