1

我想通过将字符串的每个a角色n添加charn.

例如:

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

那么输出将是"fghijklmn".

我的问题
我的代码不适用于127ASCII的上述字符。任何线索?我正在寻找我的代码中的错误,而不是其他解决方案。

这是我的代码

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;
4

1 回答 1

1

我假设您要添加到字符串的n每个元素(它们是s),并且当它超过ASCII table中字母的最大值时会出现问题。即 ASCII 对应的字母是. 在这种情况下,您想从 letter 重新开始。例如:charaz122a

输入

stuvwxyz // a
5        // n

输出

xyzabcde

如果是这样,那么问题就来了。

考虑astd::string a{ "z" };你这样做时

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

您已经将 添加n到字符并超过了最大限制,无论a[i]. 这意味着只有在不是a[i] + n > 122.

a在 if 条件中的必要步骤之后,只需将更改分配给 string 的每个字符。

见这里演示

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);
}
于 2019-05-11T15:48:10.867 回答