Проверка выхода за нижнюю границу вектора С++

Пишу код для реализации шифра Цезаря со сдвигом влево(сдвигает каждую букву введеного текста на n-е количество символов по алфавиту влево). Нашла следующий код:

#include <iostream>
#include <vector>
using namespace std;

string encrypt(string input) {
    vector<char> word(input.begin(), input.end());
    string alphabet = "abcdefghijklmnopqrstuvwxyz";

    for (int i = 0; i < (int)input.length(); i++) {
        for (int j = 0; j < (int)alphabet.length(); j++) {
            if (word[i] == alphabet[j]) {
                word[i] = alphabet[(j + 3) % 26];

                break;
            }
        }
    }
    string str(word.begin(), word.end());
    return str;
} 


int main() {
string text = "abc";
cout << text << endl;

string textencrypt = encrypt(text);
cout << textencrypt << endl;
}

Код работает для сдвига вправо, но при попытке сдвигать букву влево - выходит за нижнюю границу. Как можно реализовать проверку и переход на последний элемент(при выпадании)?


Ответы (1 шт):

Автор решения: TheRyuTeam
word[i] = alphabet[(j + X + 26) % 26]

Где X - сдвиг любого знака

Это исправит проблему с отрицательным остатком от деления

→ Ссылка