【问题标题】:Logic Error when trying to output a decrypted string from an encrypted string in Visual Studios C++尝试从 Visual Studios C++ 中的加密字符串输出解密字符串时出现逻辑错误
【发布时间】:2018-09-08 05:54:44
【问题描述】:

我的程序将加密字符串放入类函数 EncryptedString(string str)。除了当我尝试调用 get 函数来获取我遇到的解密字符串“ZZZZZZZZ”之外,似乎一切都被正确输出了。该程序获取一个短语或句子,对该句子进行加密并删除任何非法字符,然后对其进行解密并输出解密结果。我正在输入“Hello World!”它会删除 !正好。该空间应该保留,但它也变成了 Z。

  • 输入:Hello World!
  • 预期结果:Hello World
  • 输出:ZZZZZZZZZZZ

我的加密输出也有问题。我还要输出短语的加密版本。但是,当我输出它时,什么都没有输出。

  • 输入:Hello World!
  • 预期结果:Ifmmp Xpsme
  • 输出为空白。

这是整个 EncryptedString.cpp 文件的代码。感谢任何帮助我解决此问题的人,如果您需要查看 main.cpp 文件或声明我很乐意提供的功能的头文件,只是我认为此错误没有必要.但是我可能是错的。

#include "EncryptedString.h"


string decrypted;

EncryptedString::EncryptedString(string str)
{
    string enCrypt = str;
    set(enCrypt);

}



void EncryptedString::set(string str)
{
    char chBase = 'A';


    string enCry = str;
    for (int i = 0; i < enCry.length(); i++)
    {
        char ch = enCry[i];

        if ((enCry[i] < chBase || (enCry[i] > chBase + 25 && enCry[i] <  tolower(chBase)) || enCry[i] > tolower(chBase + 25)) && enCry[i] != ' ')
        {
            enCry.erase(enCry.begin() + i);
        }
        else
        {
            if (enCry[i] = chBase + 25)
            {
                enCry[i] = 'A';
            }
            else if (enCry[i] = tolower(chBase) + 25)
            {
                enCry[i] = 'a';
            }
            else if (enCry[i] = ' ')
            {
                enCry[i] = ' ';
            }
            else
            {
                enCry[i] = ch + 1;
            }

        }


    }

    EncryptedString::encryption == enCry;
    string decrypt = enCry;

    for (int i = 0; i < decrypt.length(); i++)
    {
        char ch = decrypt[i];

        if (decrypt[i] = 'A')
        {
            decrypt[i] = 'Z';
        }
        else if (decrypt[i] = 'a')
        {
            decrypt[i] = 'z';
        }
        else if (decrypt[i] = ' ')
        {
            decrypt[i] = ' ';
        }
        else
        {
            decrypt[i] = ch - 1;
        }
    }

    decrypted = decrypt;
}

const string EncryptedString::get()
{

    return decrypted;
}

const string EncryptedString::getEncrypted()
{
    return EncryptedString::encryption;
}

【问题讨论】:

  • if (enCry[i] = chBase + 25) -- 使用= 不是您在 C++ 中测试相等性的方式
  • 谢谢你。自从我使用 C++ 以来已经有一段时间了。我只是将其更改为 ==,我还在 EncryptedString::encryption = enCry; 处删除了一个额外的“=”;但是,现在只显示 get Encrypted ,但它显示的是字符串的解密版本。 @PaulMcKenzie
  • Anchara,请通过更改问题或在 cmets 中添加更多问题来避免移动目标。如果您在获得最初问题的帮助后有新问题,请针对新问题提出新问题。
  • 没关系,它有效!我在关于意外的 if 语句中添加了一个额外的等号。谢谢@PaulMcKenzie 帮助我!
  • @PaulMcKenzie 你想回答吗?我认为最初的问题已经得到解答。

标签: c++ visual-studio encryption visual-c++ logic


【解决方案1】:

问题是您在相等比较中使用了错误的运算符:

if (enCry[i] = chBase + 25)

在 C++ 中,您使用 == 来比较相等性,而不是 =。上面的行应该是:

if (enCry[i] == chBase + 25)

您在程序的其他几行中也犯了类似的错误。更正这些错误并重新运行您的程序。

【讨论】:

  • 是的,这解决了它。感谢您的帮助
猜你喜欢
  • 2020-03-20
  • 2015-08-03
  • 2018-08-30
  • 2014-11-24
  • 1970-01-01
相关资源
最近更新 更多