Kiberchief
@Kiberchief
Пока учусь.

Почему пробел заменяется на W?

#include <iostream>
#include <string>
#include<algorithm>
#include<cctype>

using namespace std;

string space (string text)
{
     text.erase(remove(text.begin(),text.end(),' '),text.end());return text;
}

string encrypt(string text, int key)
{
    string result = "";
    space(result);
    for (auto i = text.begin(); i!=text.end(); i++)
    {
        if (isupper(*i))
            result += (*i + key - 65) % 26 + 65;

        else
            result += (*i + key - 97) % 26 + 97;
    }
return result;
}
int main()
{
string text ;
int key;
getline (cin, text);
cin >> key;
cout << "Text : " << text;
cout << "\nShift: " << key;
cout << "\nCipher: " << encrypt(text, key)<<endl;
return 0;
}

помогите дописать код
  • Вопрос задан
  • 128 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Mercury13
Программист на «си с крестами» и не только
Пробел не isupper.

Расчёт тут идёт в знаковом типе, потому *i + key - 97 < 0

Существует два метода деления с остатком, в x86 встроен тот, где знак остатка равняется знаку делимого (а неполное частное — результат округления к нулю). Именно его впоследствии кодифицировали в Си99. Значит, (*i + key - 97) % 26 < 0

Это значит, что результат преобразования будет меньше 97 = 'a'. Например, 'W'.

Ах да. В Си можно написать (*i + key - 'a') % 26 + 'a'.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы