Почему моя функция дешифрования для шифра Цезаря дает неправильные выходные данные? - PullRequest
1 голос
/ 26 апреля 2019

В настоящее время я работаю над функцией расшифровки для шифра Цезаря. Я смоделировал это на написанной мной функции шифрования, которая отлично работает, в отличие от функции расшифровки.

Мой код компилируется без ошибок и выполняется. Он способен расшифровывать словами пять букв или менее, но не может делать это более чем пятью буквами, а также предложениями, содержащими два или более слов.

Также выдает неверный вывод текста, когда значение клавиши <= 12. Почему эти ошибки происходят? Любая форма помощи будет принята с благодарностью. Заранее спасибо. </p>

#include <stdio.h>

/
}

1 Ответ

0 голосов
/ 26 апреля 2019

Проблема в том, что оператор по модулю не всегда возвращает положительное значение: -1 % 26 дает -1, что заставляет вашу функцию decrypt_ltr возвращать символ вне диапазона 'a' - 'z' (или диапазона 'A' - 'Z'). Например, при расшифровке «a» с ключом 2 вы получите: 'a' - 'a' - key = -key. Затем вы выполните -key + 'a', что по-прежнему меньше 'a'.

Поскольку ваш ключ гарантированно находится в диапазоне от 1 до 26, вы можете просто добавить 26 к значению (alpha-'A') - key, например:

char decrypt_ltr(char alpha, int key) 
{
  if (alpha >= 'A' && alpha <= 'Z')
  {
      alpha = ((alpha-'A') - key + 26) % 26 + 'A'; // the 26 ensures that the value
                                                   // is positive before the modulo
                                                   // operator is applied and is
                                                   // removed by the modulo operator
  }
  else if(alpha >= 'a' && alpha <= 'z')
  {
      alpha = ((alpha-'a') - key + 26) % 26 + 'a';
  }

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