Я работаю над кодированием шифра 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
Вы модифицируете 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] ++;
}
}
Других решений пока нет …