Benstein
@Benstein
Software and Game Development Engineer.

Шифр Цезаря на C++/Qt?

Кому не лень опишите пожалуйста, как можно было бы реализовать метод шифрования и дешифрования алгоритмом Цезаря. Писал такой на чистых плюсах, с Qt возникли проблемы
  • Вопрос задан
  • 1697 просмотров
Решения вопроса 1
Profi_GMan
@Profi_GMan
QString encode(QString input, int offset) {
    for(int i = 0; i < input.length(); i++) {
        int sym = 0;
        if(input[i].toLatin1() > 64 && input[i].toLatin1() < 91 && (sym = input[i].toLatin1() + offset) > 90)
            //Если буква большая и если буква + смещение превышает код буквы Z
            input[i] = QChar(sym - 90 + 64);
        //sym - 90 получаем, насколько превышает код буквы Z, + 65 прибавляем к коду символа до A полученный результат
        //Теперь тоже самое но с проверкой на маленькую букву
        else if(input[i].toLatin1() > 96 && input[i].toLatin1() < 123 && (sym = input[i].toLatin1() + offset) > 122)
            //Если буква маленькая и если буква + смещение превышает код буквы z
            input[i] = QChar(sym - 122 + 96);
        //sym - 90 получаем, насколько превышает код буквы z, + 65 прибавляем к коду символа до a полученный результат
        else input[i] = QChar(input[i].toLatin1() + offset);
    }
    return input;
}

QString decode(QString input, int offset) {
    for(int i = 0; i < input.length(); i++) {
        int sym = 0;
        if(input[i].toLatin1() > 64 && input[i].toLatin1() < 91 && (sym = input[i].toLatin1() - offset) < 65)
            //Если буква большая и если буква - смещение меньше кода буквы A
            input[i] = QChar(sym - 64 + 90);
        //Получаем исходный символ (обратно sym - 90 + 64)
        //Теперь тоже самое но с проверкой на маленькую букву
        else if(input[i].toLatin1() > 96 && input[i].toLatin1() < 123 && (sym = input[i].toLatin1() - offset) < 97)
            //Если буква маленькая и если буква - смещение меньше кода буквы a
            input[i] = QChar(sym - 96 + 122);
        //Получаем исходный символ (обратно sym - 122 + 96)
        else input[i] = QChar(input[i].toLatin1() - offset);
    }
    return input;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы