При шифре Гронсвельда шифр уходит за рамки алфавита

При шифре Гронсвельда, например, при шифровке слове Sony и при ключе 23, шифр идёт правильно, но уходит за рамки алфавита

 void encryt()
{
    string encryptedText;
    for (int j = 0; Key.size() < Word.size(); j++)
    {
        Key.push_back(Key[j]);
    }
    for (int i = 0; i < Word.size(); i++)
    {
        if (Word[i] == ' ')
        {
            encryptedText.push_back(' ');
        }
        else
        {
            encryptedText.push_back(char((Word[i]) + Key[i] - 48));
        }
    }
    cout << "\nText: " << "\t" << Word << endl;
    cout << "Key: " << "\t" << Key << endl;
    cout << "\nEncrypted Text: " << encryptedText << endl;
    this->encryptedText = encryptedText;
}

Вывод консоли

Text:   Sony
Key:    2323

Encrypted Text: Urp|
Decrypted Text: Sony

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

Автор решения: DmitryK

Для прописных букв английского алфавита циклический сдвиг будет так

NewSymbol = Word[i] + Key[i] - 48;
if(NewSymbol > 90)
   NewSymbol -= 26;

Ну и для избежания возможных ошибок, все символы отличные от букв нужно копировать в новую строку без изменения, а не только пробелы.

if (Word[i] < 65 || Word[i] > 90) // то же самое - if (Word[i] < 'A' || Word[i] > 'Z')
{
   encryptedText.push_back(Word[i]);
}
→ Ссылка