Ошибка логики при попытке вывести расшифрованную строку из зашифрованной строки в Visual Studios C ++ - PullRequest
0 голосов
/ 08 сентября 2018

моя программа принимает зашифрованную строку в функцию класса EncryptedString (строка 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;
}

1 Ответ

0 голосов
/ 08 сентября 2018

Проблема в том, что вы используете неправильный оператор для сравнения на равенство:

if (enCry[i] = chBase + 25)

В C ++ вы используете == для сравнения на равенство, а не =. Выше строка должна быть:

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

Вы делаете подобные ошибки в нескольких других строках вашей программы. Исправьте эти ошибки и перезапустите вашу программу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...