如何将字符串中的每个字符更改为'n' 前面?
How to change every character in string to be 'n' ahead?
我想将字符串 a
中的每个字符更改为前面的 n
,方法是将字符串的每个 char
字符添加到 n
。
例如:
std::string a = "abcdefghi"
int n = 5
那么输出将是"fghijklmn"
。
我的问题:
我的代码不适用于 ASCII 中 127
以上的字符。任何线索?
我正在寻找我的代码中的错误,而不是其他解决方案。
这是我的代码
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
的每个元素(即 char
s)并且当它超过字母表的最大值时会出现问题在 ASCII table。即对应于字母 z
的 ASCII 是 122
。
在这种情况下,您想从字母 a
重新开始。
例如:
输入:
stuvwxyz // a
5 // n
输出:
xyzabcde
如果是下面的问题。
考虑 a
是 std::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);
}
我想将字符串 a
中的每个字符更改为前面的 n
,方法是将字符串的每个 char
字符添加到 n
。
例如:
std::string a = "abcdefghi"
int n = 5
那么输出将是"fghijklmn"
。
我的问题:
我的代码不适用于 ASCII 中 127
以上的字符。任何线索?
我正在寻找我的代码中的错误,而不是其他解决方案。
这是我的代码
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
的每个元素(即 char
s)并且当它超过字母表的最大值时会出现问题在 ASCII table。即对应于字母 z
的 ASCII 是 122
。
在这种情况下,您想从字母 a
重新开始。
例如:
输入:
stuvwxyz // a
5 // n
输出:
xyzabcde
如果是下面的问题。
考虑 a
是 std::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);
}