C ++ шифрование с вращением

У меня есть некоторые проблемы при создании функции, которая шифрует слово, используя число вращения, которое вводит пользователь. Вот что у меня так далеко:

string encryptWord(string word, int num)
{
string newWord;
newWord = word;
for(int i = 0; i < word.length(); i++)
{
newWord[i] = tolower(word[i]);
if((word[i] >= 'a') && (word[i] <= 'z'))
{
newWord[i] = word[i] + (num % 26);
if(newWord[i] > 'z')
newWord[i] = newWord[i] - 26;

}
}
return newWord;

}

теперь в моей главной, когда я проверяю это с

cout << encryptWord("xyz", 6);

вывод я получаю: де

Точно так же для расшифровки у меня есть

string decryptRotWord(string word, int num)
{
string newWord;
num = num % 26;
int index;
for(int i = 0; i < word[i]; i++)
{
newWord[i] = tolower(word[i]);
if(word[i] >= 'a' && word[i] <= 'z')
{
index = word[i] - num;
if(index < 'a')
index = index + 26;
newWord[i] = index;
}
}
return newWord;

}

однако для этого он ничего не выводит, когда я тестирую с

cout << decryptRotWord("vdds", 2);

1

Решение

В вашей функции дешифрования, я думаю, у вас есть ошибка в условии завершения цикла:

for(int i = 0; i < word[i]; i++)

Как и в функции шифрования, вы должны выполнять итерацию по длине

for(int i = 0; i < word.length(); i++)

0

Другие решения

Когда ваш for цикл прибывает к письму 'z', оно делает 'z' + 6, Но это выходит за рамки максимальной длины char (127). Вы получаете неопределенное поведение от этого.

Вы должны реализовать способ начать отсчет с 'a' всякий раз, когда вы проверяете шифрование выходит за рамки 'z',

Для расшифровки, как уже упоминалось ранее, вы хотите проверить:

i < word.length()
0