从加密字符串程序获取输出时发生逻辑错误。

时间:2018-09-10 01:38:18

标签: c++ visual-studio encryption logic

我已经编写了一个程序,该程序将字符串放入EncryptedString类中,然后对所述字符串进行加密,以删除不包含空格,大小写字母的任何内容。直到我输入带有496496#@ ###!#!!! 4之类的字符串,然后一切都删除了,然后保留了其他字符串,一切似乎都运行良好。我有一些应该输出的示例。

  • 输入:Hello World!
  • 预期解密:Hello World
  • 预期加密:Ifmmp Xpsme
  • 解密的输出:Hello World
  • 输出加密:Ifmmp Xpsme

Hello World可以正常工作,并删除!

但是,当我尝试执行“一个苹果在秋天z !! 14逃了吗?我明白了

  • 输入:一个苹果在秋天z !! 14消失了?
  • 预期已解密:一个苹果在秋天z消失了
  • 期望加密:B bqqmf sbo bxbz jo bvuvno a
  • 解密的输出:一个苹果在z 3秋季消失了
  • 已加密输出:B bqqmf sbo bxbz jo bvuvno a!4

这是另一个示例。

  • 输入:Emily Dickinson1152163 !!! @@#@#!!!
  • 期望解密:艾米莉·狄金森
  • 预期加密:Fnjmz Ejeljotpo
  • 解密的输出:Emily Dickinson015 ??
  • 输出加密:Fnjmz Ejdljotpo126 !! @@ !!

我认为这可能是因为当我在crypto.length()和enCry.length()上迭代代码时,它遍历了元素吗?但是,我感觉不是那样,因为它可以删除其他数字和符号,但出于某种原因,有些仍然存在。在我的迭代过程中,下面的代码有什么问题会导致这种情况吗?

    //This function takes the phrase,word or sentence and encrypts it, removing any illegal characters aside from ' ' and then proceeds to decrypt it then output them to the get functions. 
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] != ' ')
        {
            enCry.erase(enCry.begin() + i);
        }
        else if (enCry[i] > chBase + 25 && enCry[i] < tolower(chBase) && enCry[i] != ' ')
        {
            enCry.erase(enCry.begin() + i);
        }
        else if (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;
}


//This function outputs the decryption after the phrase was encrypted. 
const string EncryptedString::get()
{

    return decrypted;
}   
//This function outputs the encryption of the phrase. 
const string EncryptedString::getEncrypted()
{
    return EncryptedString::encryption;
}

作为更多信息,这里是我正在使用这些函数的main.cpp中的内容。我以为可能是因为我在test2中设置了两次,但是我通过将数字添加到hello world来测试了test1,并且输出只保留了一些数字。如果您需要查看该示例,我将提供。

#include "EncryptedString.h"
#include <windows.h>

int main()
{
    cout << "TEST 1" << endl << endl;
    EncryptedString test1("Hello World!");
    cout << test1.get();
    cout << endl << endl;
    cout << test1.getEncrypted();

    cout << endl << endl << "TEST 2" << endl << endl;


    EncryptedString test2;
    test2.set("A apple ran away in autumn z!!14?");
    cout << endl << endl;
    cout << test2.get();
    cout << endl << endl;
    cout << test2.getEncrypted();

    cout << endl << endl; 
    test2.set("Emily Dickson1152163!!!@@#@#!!!");
    cout << test2.get() << endl << endl << test2.getEncrypted();

    //being used for me to see the output. 
    Sleep(15000);
}

如果有人可以看到我出了错,或者如果我的迭代出现问题,我将不胜感激。感谢任何人阅读所有这些内容,因为我知道这可能很多,也感谢您可以给我的任何帮助。还可以将其视为逻辑错误或结构错误吗?我相信逻辑,但是我可能错了,我想知道,所以以后在寻求帮助时我不会犯这个错误。

0 个答案:

没有答案