遇到C++相关问题

Having problems with C++ related issues

本文关键字:问题 C++ 遇到      更新时间:2023-10-16

我写了一个C++程序来执行Vigenere密码,但我遇到了几个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 << "nnEnter Your Message: "; 
    getline(cin, Message);
    cout << "nEnter The Main Key: ";
    getline(cin, Key);
    cout << "nn"<<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 << "nn"<<endl;
        }
    }


    return 0;
}   
/*
INPUT:
Enter Your Message: Hello There 
Enter The Main Key: Secret
OUTPUT:
Encryption: Z
*/

第 1 点:程序不解密加密的消息

当然不是。该程序不包含任何将解密加密消息的代码。我无法在第 1 点上提供帮助。

第 2 点:最后一个for循环不起作用。

您不需要循环来打印加密消息。

cout << "Encryption: " << Encryption<< endl;
cout << "nn" << 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 << "nn"<<endl;
    }
}

另外:

string Encryption;内没有分配空间。默认情况下,字符串为空。它没有字符串长度,因此尝试索引字符串,如Encryption[i],是没有意义的。没有要访问Encryption[i],并且尝试这样做没有定义的结果。它可能会使您的程序崩溃。它可能看起来像正在运行,稍后会使程序崩溃。它可以做任何事情,包括看起来它正在工作。

要解决此问题,需要使用 string::resize 分配空间。 读入要编码的消息后,

cout << "nnEnter Your Message: "; 
getline(cin, Message);

Encryption.resize(Message.size());

以分配所需的存储。