Ваша строка encrypted
пуста, поэтому индексация в ней с помощью .at()
вызывает исключение.
Чтобы решить эту проблему, вы можете добавить символы, например:
for(int i=0;i<original.length();i++){
if(std::isalpha(original.at(i))){
encrypted += key.at(alphabet.find(original.at(i)));
}
else
encrypted += original.at(i);
}
Вот демонстрация .
В качестве альтернативы вы можете гарантировать этот encrypted
имеет тот же размер, что и original
, например:
encrypted = original;
, а затем ваш l oop останется прежним.
Кроме того, вы можете упростить свой l oop, используя диапазон для l oop:
for(unsigned char c : original){
if(std::isalpha(c)){
encrypted += key.at(alphabet.find(c));
}
else
encrypted += c;
}
Вы можете еще больше упростить это, объединив 2 подхода:
string encrypted = original;
for (auto &c : encrypted)
if (std::isalpha(c))
c = key.at(alphabet.find(c));
Вот демонстрация .