Откопал код шифра Цезаря на C++ Собственно, вот он:
string cipherOfCaesarEnglish(string word, int shift)
{
for (int i = 0; i < word.length(); i++)
{
if (word[i] >= 'a' && word[i] <= 'z') word[i] = 'a' + (word[i] - 'a' + (26 - shift)) % 26;
else if (word[i] >= 'A' && word[i] <= 'Z') word[i] = 'A' + (word[i] - 'A' + (26 - shift)) % 26;
}
return word;
}
Мне не очень понятно, как он работает, и это нужно исправить. Помогите пожалуйста
if (word[i] >= 'a' && word[i] <= 'z')
если символ word[i] является какой то буквой из последовательности от а по z, т.е. является маленькой буквой из альфавита, то присваиваем значение:
символу 'a'можем прибавить цифру не больше чем 25, чтобы не выходить за пределы альфавита, поэтому:
word[i] = 'a' + к % 26; // k%26 всегда меньше 26
где к равен word[i] - 'a' + (26 - shift), т.е это дистанция между символом и первой буквой альфавита + дистанция между количеством букв в альфавите и заданным числом. Та же логика, если это большая буква...
Сборка персонального компьютера от Artline: умный выбор для современных пользователей