我正在尝试将字符串中的每个字母替换为下一个字母(a -> b,c -> d 等)。
编译并运行程序后,我得到随机符号或XXXX。
#include <iostream>
#include <string>
using namespace std;
int main(){
char arr1[26] = {'a', 'b', 'c', 'd',
'e', 'f', 'g', 'h',
'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p',
'q', 'r', 's', 't',
'u', 'v', 'w', 'x',
'y', 'z'};
string x;
getline(cin, x);
for(int i = 0; i < x.length(); i++){
for(int h = 0; h < 26; h++){
if(x[i] == arr1[h]){
x[i] = arr1[h + 1];
}
}
}
cout << x;
return 0;
}
我认为我对 char 数据类型做错了。
您的代码有两个问题。首先,如果
h == 25
,那么h+1
就是26
,并且不存在arr1[26]
。这就是“随机符号”的来源。
第二个问题是,一旦你替换了角色,你仍然会再次检查它,它会找到另一个匹配项并替换它,然后重新检查(等等)。
您可以像这样更改您的
if
声明:
if(x[i] == arr1[h]){
x[i] = arr1[(h + 1) % 26]; // in case h + 1 > 26, loop back to 0 (i.e. 'a')
break; // don't keep searching for another match
}