Во-первых, не используйте магические числа, такие как 122 и 97. Используйте фактическое значение символа.
Во-вторых, просто объявите строку abcdefghijklmnopqrstuvwxyz
и внесите в нее указатель.Это устраняет необходимость в 122, 97 или любом другом номере.Мало того, вы, вероятно, можете увидеть, как решить задачу намного проще, когда работаете с индексами, такими как 0, 1, 25 и т. Д. Вместо 122, 97 и т. Д.
Как только вы это сделаете, немногонемного понимания показывает, что следующие два символа будут в позиции (если позиции начинаются с 0), (index + 1) % 26
и (index + 2) % 26
.%
является оператором модуля и возвращает остаток после деления.
Например, если текущий символ y
, y
находится в позиции 24 строки,Итак,
(24 + 1) % 26 = 25 % 26 = 25
и (24 + 2) % 26 = 26 % 26 = 0
Итак, следующие два символа расположены в позиции 25 и позиции 0, которые являются z
и a
.
Возьмем другой пример: z
:
(25 + 1) % 26 = 26 % 26 = 0
и (25 + 2) % 26 = 27 % 26 = 1
Так что следующие символы после z
- a
и b
.
Как правило, когда вы получаете назначение, в котором данные «оборачиваются» в 0, тогда сразу же приходит на ум слово «остаток» или «арифметика по модулю».
конечная программа будет выглядеть так:
#include <iostream>
int main()
{
char ch;
const char * alphabet = "abcdefghijklmnopqrstuvwxyz";
std::cin >> ch;
int position1 = ch - 'a'; // get position of input character
int position2 = (position1 + 1) % 26; // get position of next character
int position3 = (position1 + 2) % 26; // get position of next next character
// output results
std::cout << ch << alphabet[position2] << alphabet[position3];
}
Live Example