Проверка выхода за нижнюю границу вектора С++
Пишу код для реализации шифра Цезаря со сдвигом влево(сдвигает каждую букву введеного текста на 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 - сдвиг любого знака
Это исправит проблему с отрицательным остатком от деления