Перестановка 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
Пожалуйста, что я пропускаю / пропускаю ???
Вам нужен только один из 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.
Других решений пока нет …