Шифрование Цезаря в C ++: символы не будут возвращаться к «a» или «A»

Я работаю над кодированием шифра Ceasar, который читает открытый текст из .txt, шифрует открытый текст и пишет во второй .txt, затем читает второй .txt и расшифровывает его в третий .txt. Все работает, кроме шифрования символов в конце алфавита. Когда персонаж достигает «z» или «Z», он должен вернуться к «a» или «A». Ниже приведен фрагмент кода из моей функции кодирования, это единственный бит, который вызывает проблемы.

if (isalpha(inputString[i])) {         //use isalpha() to ignore other characters
for (int k = 0; k < key; k++) {     //key is calculated in another function, 6 in this case
if (inputString[i] == 'z')      //these statements don't seem to work
encryptedString[i] = 'a';
else if (inputString[i] == 'Z')
encryptedString[i] = 'A';
else                            //this part works correctly
encryptedString[i] ++;
}
}

Входные данные:

Быстрая коричневая лиса

Перепрыгнул через —-

Дом или луна или что-то еще.

Ожидаемый результат:

ZNK waoiq hxuct lud

Pasvkj ubkx znk —-

Нуайк ю суц юкс юск-знотм.

Фактический выход:

Q {ick bro} n fo ~

J {mped o | er the —-

Ho {se или луна или кое-что.

Ключ: 6

1

Решение

Вы модифицируете encryptedString а затем основывать свое решение «зацикливание» на inputString,

Я подозреваю, что вы хотите сначала инициализировать encryptedString от inputString, а потом работать только на encryptedString,
Мне кажется, что вы должны сделать это так:

encryptedString[i] = inputString[i]; // initialize encryptedString
if (isalpha(inputString[i]))
{
for (int k = 0; k < key; k++)
{
if (encryptedString[i] == 'z') // read from encryptedString instead of inputString
encryptedString[i] = 'a';
else if (encryptedString[i] == 'Z') // read from encryptedString instead of inputString
encryptedString[i] = 'A';
else
encryptedString[i] ++;
}
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector