遇到与C ++相关的问题

时间:2016-02-12 00:29:40

标签: c++ encryption

我编写了一个执行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
*/

1 个答案:

答案 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());

分配您需要的存储空间。