Он никогда не позволит зашифрованному символу превысить предполагаемый диапазон, то есть a - z. Значения ascii для a и z равны 97 и 122 соответственно, и вам потребуется шифрование Цезаря только в этом диапазоне символов.
Это позволит проверить, больше ли код ascii ch
, чем asciiz
if(ch > 'z'){
Если да, будет вычислено: (ASCII ch
) - (ASCII z
) + (ASCII a
) - 1.
ch = (char)(ch - 'z' + 'a' - 1);
Он переведен на ch = (char)(ch - 122 + 97 - 1);
Предположим, вы хотите зашифровать символ a
ключом 3
. Программа примет 97 (ASCII a
) + 3. Вы получите 100, что является ASCII d
. Но что если вы хотите зашифровать z
ключом 3
?
То же, что и раньше, потребуется 122 (ascii of z
) + 3 = 125. Однако 125 не найден в диапазоне 97 - 122 (az). Таким образом, вы получите нежелательный символ (в данном случае 125 - это ascii }
).
Следовательно, (ch - 'z' + 'a' - 1)
обеспечит преобразование любого персонажа, превосходящего ascii 122, обратно в персонажа. с диапазоном ASCII 97 и 122 включительно только. В примере 125 ch = (char)(125 - 122 + 97 - 1)
=> ch = (char)(99)
=> ch = c
.