строка — C ++ Vigenere Cipher

Я написал этот код для Vigenere Cipher на C ++ (при условии, что текст и ключ в нижнем регистре).

void encrypt(string& plaintext , string key){
int j = 0;

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

//cout<<"value of key["<<j<<"] = "<<int(key[j])<<endl;

plaintext[i] -= 97;
key[j] -= 97;

plaintext[i] = ((plaintext[i] + key[j])%26)+97;

j = (j+1)%key.length();
}
}

Проблема в том, что когда j сбрасывается до 0, ключ [j] оказывается равным NULL (0).
Например, Если я предполагаю открытый текст, чтобы быть «человеком» а также ключ, чтобы быть ‘abcd’ первые 4 символа открытого текста зашифрованы правильно, но для последнего символа значение ключа [j] оказывается равным 0 или нулю вместо возврата к «а».

Я не уверен, почему это происходит. Я предполагаю, что строковый класс неявно обрабатывает нулевые значения, что делает его еще более запутанным для меня.

0

Решение

key[j] -= 97;

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

Если key был «abcd», на втором проходе теперь будет 0.

Не модифицируйте key в вашей функции. Поскольку этот параметр не должен изменяться, он должен быть объявлен как const std::string keyили, еще лучше, const std::string &key, Если бы это было сделано таким образом, компилятор поймал бы эту ошибку для вас.

1

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

Других решений пока нет …

По вопросам рекламы [email protected]