шифрование — C ++ ROT-13 дает результат, которого я не ожидал

Перестановка 13 букв в C ++ работает не так, как я планировал. Все буквы сначала были написаны заглавными буквами, поэтому имеют значение только номера ASCII 65-90. Если буквы выше 77, я вычитаю для учета возврата к «А».

for (int j = 0; j < plainStr.length(); ++j)
{
int x = plainStr[j];
// if-statement one
if(x==32)  // keep spaces
{
cryptStr = cryptStr + (char)x;
}
// if-statement two
if((x>=65) && (x<=77))  // rotate 'A' through 'M' by +13
{
x=x+13;
cryptStr = cryptStr + (char)x;
}
// if-statement three
if((x>77) && (x<=90))  // rotate 'N' through 'Z' by -26+13=-13
{
x=x-13;
cryptStr = cryptStr + (char)x;
}

Проблема в том, что операторы if один и два работают так, как задумано. На самом деле, если я просто сделаю прямое +13 транспонирование ASCII без перехода к «A», код работает нормально. Но, как только я включаю выражение if-3, я начинаю получать неправильные двухбуквенные результаты, которые не позволяют мне впоследствии расшифровать. Например:

Строка ввода: «Это все, что я получил»

Дает вывод: «ГУХВИФ ВИФ НАЙЛЫЛ ВИ ТГБГФ»

T = G

H = UH

Я = VI

S = F

Пожалуйста, что я пропускаю / пропускаю ???

1

Решение

Вам нужен только один из if инструкции для выполнения, поэтому убедитесь, что у вас есть вторые два в else статьи:

  if(x==32)  // keep spaces
{
cryptStr = cryptStr + (char)x;
}
else if((x>=65) && (x<=77))  // rotate 'A' through 'M' by +13
{
x=x+13;
cryptStr = cryptStr + (char)x;
}
else if((x>77) && (x<=90))  // rotate 'N' through 'Z' by -26+13=-13
{
x=x-13;
cryptStr = cryptStr + (char)x;
}

Как у вас сейчас, если 2-й if исполняется тогда x увеличивается на 13, что делает 3-е условие if равным true.

4

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

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

По вопросам рекламы [email protected]