Benstein
@Benstein
C++ Developer

Кириллица в QString для шифра Цезаря?

Есть код:
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;
}

Не могу сообразить как его адаптировать под русский язык. Помогите пожалуйста.
  • Вопрос задан
  • 27 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы