尝试在 C++ 中替换字符后获取随机符号

问题描述 投票:0回答:1

我正在尝试将字符串中的每个字母替换为下一个字母(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 数据类型做错了。

c++ char
1个回答
0
投票

您的代码有两个问题。首先,如果

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
}
© www.soinside.com 2019 - 2024. All rights reserved.