Как изменить каждый символ в строке, чтобы быть впереди? - PullRequest
1 голос
/ 11 мая 2019

Я хочу изменить каждый символ в строке a на n вперед, добавив каждый char знак строки в n.

Например:

std::string a = "abcdefghi" 
int n = 5 

тогда вывод будет "fghijklmn".

Моя проблема :
Мой код не работает для символов выше 127 в ASCII .какая-нибудь подсказка?Я ищу ошибку в своем коде, а не другие решения.

Это мой код

string a; cin >> a;
int n;    cin >> n;

for (int i = 0; i < a.length(); i++)
{
    a[i] = a[i] + n;
    if (a[i] > 122)
    {
        a[i] %= 122;
        a[i] += 96;
    }
}
cout << a << endl;

1 Ответ

1 голос
/ 11 мая 2019

Я предполагаю, что вы хотите добавить n к каждому элементу (которые char s) строки a и возникли проблемы, когда оно превышает максимальное значение алфавитов в ASCII-таблице . то есть ASCII, соответствующая букве z, которая является 122. В этом случае вы хотите начать снова с буквы a. Например:

ввод

stuvwxyz // a
5        // n

выход

xyzabcde

В этом случае проблема заключается в следующем.

Рассмотрим a быть std::string a{ "z" }; Когда вы сделаете это

a[i] = a[i] + n;

вы уже добавили n к персонажу и превысили максимальный лимит, независимо от того, какой символ в a[i]. Это означает, что вам нужно делать это только тогда, когда это не относится к a[i] + n > 122.

Просто назначьте изменение каждому символу строки a после необходимых шагов в условии if.

( Смотрите здесь для демо )

short n = 5;                 // std::cin >> n;
for (std::size_t i = 0; i < a.size(); ++i)
{
    short  res = static_cast<short>(a[i]) + n;
    if (res > 122)
    {
        res %= 122;
        res += 96;
    }
    a[i] = static_cast<char>(res);
}
...