Как работает данный код для шифрования слова шифром Цезаря?

201
06 мая 2018, 20:19

Откопал код шифра Цезаря на 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;
}

Мне не очень понятно, как он работает, и это нужно исправить. Помогите пожалуйста

Answer 1
if (word[i] >= 'a' && word[i] <= 'z') 

если символ word[i] является какой то буквой из последовательности от а по z, т.е. является маленькой буквой из альфавита, то присваиваем значение:

символу 'a'можем прибавить цифру не больше чем 25, чтобы не выходить за пределы альфавита, поэтому:

 word[i] = 'a' + к % 26; // k%26 всегда меньше 26

где к равен word[i] - 'a' + (26 - shift), т.е это дистанция между символом и первой буквой альфавита + дистанция между количеством букв в альфавите и заданным числом. Та же логика, если это большая буква...

READ ALSO
С++ в Visual Studio

С++ в Visual Studio

Решил проверить код из книги ООП в С++ Лафоре но в Visual Studio не получается его повторить

166
Диалоговое окно для выбора файла потока ввода

Диалоговое окно для выбора файла потока ввода

Написал простой векторный редактор и сохранение изображения идет в текстовый документКак сделать чтобы при нажатии на соответствующую...

191
_com_ptr_t::CreateInstance

_com_ptr_t::CreateInstance

Есть два приложения, App1 и App2App2 - стартует из первого по средствам _com_ptr_t m_pApp2

153
Форматирование кода в С++ [требует правки]

Форматирование кода в С++ [требует правки]

Задача: Написать программу для форматирования исходного кода С++Т

175