Привет, я работаю над программой шифрования. Программа должна взять письмо, введенное пользователем, и заменить его соответствующей буквой 11 мест дальше по алфавиту. Например, если пользователь вводит "joe", программа должна выводить "uzp".
Мой текущий код делает это прекрасно, но он не распознает пробелы, и программа должна обернуть алфавит. Так что "Y" станет "J", а "Z" станет "K" и т.д. Кто-нибудь знает, как я мог это исправить?
void encrypt(std::string &e);
int main() {
string nameAttempt;
cout << "Enter your name to be Encrypted: ";
cin >> nameAttempt;
cout << "Original string is: " << nameAttempt << endl;
encrypt( nameAttempt );
cout << "Encrypted string is: " << nameAttempt << endl;
system("pause");
return 0;
}
void encrypt (std::string &e) {
const char* tempCharArray = e.c_str();
for( int i=0; i<e.size(); ++i )
e[i] = tempCharArray[i]+11;
} //
Предполагая, что вы хотите:
void encrypt (std::string &e)
{
int size = e.size();
for (int i=0; i<size; i++)
{
char c = e[i];
if (('A' <= c && c <= 'Z'-11) || ('a' <= c && c <= 'z'-11))
e[i] = c+11;
else if ('Z'-11 < c && c <= 'Z')
e[i] = c+11-'Z'+'A';
else if ('z'-11 < c && c <= 'z')
e[i] = c+11-'z'+'a';
}
}
Вы могли бы сделать что-то вроде этого:
char _character='X';
int _value=static_cast<int>(_character);
if(_value!=32)//not space
{
int _newValue=((_value+11)%90);
(_newValue<65)?_newValue+=65:_newValue+=0;
char _newCharacter=static_cast<char>(_newValue);
}