Шифр Цезаря на C++. Помогите исправить код, работает, но не дешифрует обратно слова. Что делаю не так

Три неточности в коде. Подчеркивает зеленым эти строки

stroka[i] = newstroka; '\0';
for (int i = 0; stroka[i] != '\0'; ++i)

И при дешифровании не выдает искомое слово.

Как происходит процесс 1 я ввожу количество символов - работает, идем дальше 2 я ввожу сдвиг - работает ,но если ввести букву или символ уходи в бесконечный цикл 3 я ввожу одну букву "z" для тестирования, по идее должна появиться буква "a",но выходит "y" и какой то мусор. Подскажите что не так делаю. Спасибо.

#include <iostream>
using namespace std;
char p;
int main()
{
    setlocale(LC_ALL, "ru");
    while (p != '3')
    {
        cout << "\nВас приветствует программа \"Шифр Цезаря 1.0\"\n\n";
        cout << "Выберите действие :" << endl;
        cout << "1.Шифрование \n" <<
            "2.Дешифрование \n" <<
            "3.Выход \n\n";
        cin >> p;

        switch (p)
        {
        case '1':
        {

            int simvol;
            int shift;

            cout << "\"Введите количество символов слова\"-" << endl;
            cin >> simvol;
            cout << "\"Введите сдвиг, на который хотите изменить слово\"-" << endl;
            cin >> shift;
            cout << "\"Введите слово латинскими буквами\"-" << endl;
            char* stroka = new char[simvol];
            for (int i = 0; i < simvol; ++i)
            {
                cin >> stroka[i];
            }
            if (stroka)
            {
                char newstroka;
                for (int i = 0; stroka[i] != '\0'; ++i)
                {
                    newstroka = stroka[i];
                    if (newstroka >= 'a' && newstroka <= 'z')
                    {
                        newstroka = newstroka - shift;
                        if (newstroka < 'a')
                        {
                            newstroka = newstroka + 'z' - 'a' + 1;
                        }
                        stroka[i] = newstroka;
                    }
                    else if (newstroka >= 'A' && newstroka <= 'Z')
                    {
                        newstroka = newstroka - shift;
                        if (newstroka < 'A')
                        {
                            newstroka = newstroka + 'Z' - 'A' + 1;
                        }
                        stroka[i] = newstroka; '\0';
                    }
                }
            }

            cout << stroka << endl;
            delete[]stroka;
            break;
        }
        case '2':
        {
            int simvol;
            int shift;

            cout << "\"Введите количество символов слова\"-" << endl;
            cin >> simvol;
            cout << "\"Введите ключ для расшифровки слова\"-" << endl;
            cin >> shift;
            cout << "\"Введите слово латинскими буквами\"-" << endl;
            char* stroka = new char[simvol];
            for (int i = 0; i < simvol; ++i)
            {
                cin >> stroka[i];
            }
            if (stroka)
            {
                char newstroka;
                for (int i = 0; stroka[i] != '\0'; ++i)
                {
                    newstroka = stroka[i];
                    if (newstroka >= 'a' && newstroka <= 'z')
                    {
                        newstroka = newstroka - shift;
                        if (newstroka < 'a')
                        {
                            newstroka = newstroka - 'z' + 'a' - 1;
                        }
                        stroka[i] = newstroka;
                    }
                    else if (newstroka >= 'A' && newstroka <= 'Z')
                    {
                        newstroka = newstroka + shift;
                        if (newstroka < 'A')
                        {
                            newstroka = newstroka - 'Z' + 'A' - 1;
                        }
                        stroka[i] = newstroka; '\0';
                    }
                }
            }

            cout << stroka << endl;
            delete[]stroka;
            break;
        }

        return 0;
        }
    }
}

Ответы (0 шт):