我编写了一个执行Vigenere密码的C ++程序,但我遇到了几个c ++问题。一个是程序加密,但它没有解密它的加密。另一个问题是最后一个for循环是什么,它似乎没有正常工作。第三个问题是c ++没有增加空间在哪里我输入空格。而且它只打印出一个字母。我不会真正得到c ++,因为我不熟悉它。
#include <iostream>
using namespace std;
int main()
{
string Message; //What The User Inputs
string Key; // What Key To Go By
string Encryption; // The Secret
cout << "\n\nEnter Your Message: ";
getline(cin, Message);
cout << "\nEnter The Main Key: ";
getline(cin, Key);
cout << "\n\n"<<endl;
for (int i=0; i<=Message.size(); i++) //letter i is less than the length of the message
{
int k=0;
Encryption[i] = (( (Message[i]-97) + (Key[k]-97)) %26) + 97; //The Algorithm
k++;
if ( k==Key.size() )
{
k=0;
}
}
for (int i=0; i<=Message.size(); i++)
{
string Result;
Result = Encryption[i];
if ( i == Message.size() )
{
cout <<"Encryption: "<< Result <<endl;
cout << "\n\n"<<endl;
}
}
return 0;
}
/*
INPUT:
Enter Your Message: Hello There
Enter The Main Key: Secret
OUTPUT:
Encryption: Z
*/
答案 0 :(得分:1)
第1点:程序不解密加密的消息
当然不是。该程序不包含任何会解密加密邮件的代码。我在第1点无能为力。
第2点:最后一个for
循环不起作用。
您不需要循环来打印加密的邮件。
cout << "Encryption: " << Encryption<< endl;
cout << "\n\n" << endl;
第3点:“c ++没有在我输入空格的位置添加空格”
我不明白你的意思。请解释一下。
第4点:只打印出一个字符
根据第2点,不需要此循环,但要解释出现了什么问题:
for (int i=0; i<=Message.size(); i++)
{
string Result;
创建一个名为Result
的空临时字符串。每次循环移动时都会创建一个新的结果,前一个将被销毁。
Result = Encryption[i];
将Result
设置为字符串Encryption
中的第i个字符。结果现在只包含一个字符。
if ( i == Message.size() )
{
如果i
已达到消息的长度
cout <<"Encryption: "<< Result <<endl;
打印出Result
中的一个字符。
cout << "\n\n"<<endl;
}
}
另外:
string Encryption;
内没有分配空间。默认情况下,字符串创建为空。它没有字符串长度,因此尝试索引字符串(如Encryption[i]
中)是没有意义的。没有Encryption[i]
被访问,并且尝试这样做没有定义的结果。它可能会使您的程序崩溃。它可能看起来正在运行,并在以后崩溃您的程序。它可以做任何事情,包括看起来它正在工作。
要解决此问题,需要使用string::resize分配空间。在读入要编码的消息后,
cout << "\n\nEnter Your Message: ";
getline(cin, Message);
添加
Encryption.resize(Message.size());
分配您需要的存储空间。