Top.Mail.Ru
Ответы

Объясните пожалуйста как работает этот код с++

Этот код реализует шифр цезаря, не особо понимаю зачем тут прибавляются буквы какие-то, откуда берутся буквы которые получаются при сдвиге? В общем, был бы рад объяснению

#include <iostream>
#include <locale>
#include <Windows.h>
#include <cstring>
using namespace std;

int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, ".1251");
int step;
string b;
char inptext[255];
cout « "Введите ФИО - ";
cin.getline(inptext, 255);
cout « "Введите сдвиг - ";
cin » step;
for (int i = 0; i < strlen(inptext); i++)
{
if (inptext[i] == ' ')
b += ' ';
else
b+= (inptext[i] - 'а' + step) % 32 + 'а';
}
cout « "Мое зашифрованное ФИО:" « endl;
cout « b « endl;
system("pause");
}

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок

реализует шифр Цезаря для шифрования ФИО, который заключается в сдвиге каждой буквы на заданное число позиций в алфавите.
Переменная "step" указывает на количество позиций, на которое нужно сдвинуть каждую букву введенного ФИО. При этом сдвиг осуществляется относительно первой буквы русского алфавита "а".
В строке "b+= (inptext[i] - 'а' + step) % 32 + 'а'" выполняется сдвиг каждой буквы ФИО на значение "step" позиций в алфавите. При этом сначала из ASCII-кода текущей буквы ФИО вычитается ASCII-код первой буквы русского алфавита ('а'). Затем к полученному числу добавляется значение "step" и вычисляется остаток от деления на количество букв в русском алфавите (32). Наконец, к полученному результату прибавляется ASCII-код буквы 'а', чтобы получить ASCII-код нужной буквы ФИО после сдвига.
Если текущий символ ФИО является пробелом, то просто добавляется пробел в зашифрованное ФИО.
Например, если введено ФИО "Иванов Иван Иванович", а значение "step" равно 3, то программа выведет зашифрованное ФИО "лёерй лёер лёеррмш".