C++ 字符串子串输出o范围

C++ 字符串子串输出o范围,c++,C++,我对这个代码有问题。我读了一些关于它的问题,但我在代码中找不到问题 string Mansfildenc(string input){ string output; char tab[5][5] = { {'a', 'b', 'c', 'd', 'e'}, {'f', 'g', 'h', 'i', 'k'}, {'l', 'm', 'n', 'o', 'p'}, {'q', 'r', 's', 't', 'u'},

我对这个代码有问题。我读了一些关于它的问题,但我在代码中找不到问题

string Mansfildenc(string input){
    string output;
    char tab[5][5] = {
        {'a', 'b', 'c', 'd', 'e'},
        {'f', 'g', 'h', 'i', 'k'},
        {'l', 'm', 'n', 'o', 'p'},
        {'q', 'r', 's', 't', 'u'},
        {'v', 'w', 'x', 'y', 'z'}};
    char tab2[5]={'A','E','I','O','U'};
    int j=0,i;
    char c;
    int gasit;
    int lin,col;
    for(i=0;i<input.length();i++){
        c=tolower(input[i]);
        if(isalpha(c)){
            if(c=='j'){
                output[j]='E';
                j++;
                output[j]='O';
                j++;
            }
            else{
                gasit=0;
                for(lin=0;lin<5;lin++){
                    for(col=0;col<5;col++)
                        if(tab[lin][col]==c){
                            gasit=1;
                            break;
                        }
                        if(gasit==1) break;
                }
                output[j]=tab2[lin];
                j++;
                output[j]=tab2[col];
                j++;
            }
        }
        else{
            output[j]=c;
            j++;
        }
    }
    return output;
}
string Mansfildenc(字符串输入){
字符串输出;
字符选项卡[5][5]={
{'a','b','c','d','e'},
{'f','g','h','i','k'},
{'l','m','n','o','p'},
{'q','r','s','t','u'},
{'v','w','x','y','z'};
char tab2[5]={'A','E','I','O','U'};
int j=0,i;
字符c;
int gasit;
林林涛,;

对于(i=0;i使用char[]保存输出,或者使用output=output+string(1,char)将字符附加到输出字符串


正如Luchian所建议的,您需要非常小心地处理char[],这也需要对代码进行一些更改。请改用string。

output
是一个空字符串。在这种情况下,
output[j]
对于
j
的任何值都无效。请重试本地
char[]< /代码>将导致未定义的行为。我没有建议他返回字符[]。返回字符串(char)是安全的。为什么不使用惯用的C++?为什么不使用代码>字符串< /代码>?我确实建议他可以使用“或者使用输出=输出+字符串(1,char)”。