如何将字符串中的每个字符更改为'n' 前面?

How to change every character in string to be 'n' ahead?

我想将字符串 a 中的每个字符更改为前面的 n,方法是将字符串的每个 char 字符添加到 n

例如:

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

那么输出将是"fghijklmn"

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

这是我的代码

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;

我假设你想将 n 添加到字符串 a 的每个元素(即 chars)并且当它超过字母表的最大值时会出现问题在 ASCII table。即对应于字母 z 的 ASCII 是 122。 在这种情况下,您想从字母 a 重新开始。 例如:

输入:

stuvwxyz // a
5        // n

输出:

xyzabcde

如果是下面的问题。

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

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

你已经给字符添加了n并且超过了最大限制,不管a[i]中的字符是什么。这意味着只有在 a[i] + n > 122 不是这种情况时才需要这样做。

在 if-condition.

中的必要步骤之后,只需将更改分配给字符串 a 的每个字符

(看这里 演示)

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);
}