为什么我要获得元素填充元素的零长度

Why do I get zero length for a string filled element by element?

本文关键字:元素 填充 为什么 我要      更新时间:2023-10-16

这是我的问题。我正在使用G 编译(Ubuntu 7.3.0-27ubuntu1〜18.04)7.3.0

我想检查字符串的每个元素,并仅在辅音时复制它。

这就是我尝试这样做的方式:这只是选择元音的功能:

bool _is_vowel(char a){
    if (a=='a' || a=='A' || a=='e' || a=='E' ||a=='i' || a=='I' || a=='o' || a=='O' || a=='u' || a=='U' || a=='y' || a=='Y')
        return true;
    else return false;
}

这是不起作用的代码。具体来说,ss.length()内部似乎是0,字符串SS不包含字符,但它们在While循环内正确打印。

 main(){
    int i=0, c=0; 
    string ss, name;
    cout << "insert namen";
    getline(cin, name);
    while (i<int(name.length())){
       if (!_is_vowel(name[i])){
          cout << name[i]<< "t";
          ss[c]=name[i];
          cout << ss[c]<< "n";
          c++;
        }
        i++;
    }    
    cout << int(ss.length())<<endl;
    cout << ss;                
    } 

有人可以向我解释我错了或给我一些参考吗?预先感谢

string ss;

声明长度为0的字符串。

ss[c] = ...;

然后尝试访问并设置为不存在的索引。这是未定义的行为。如果您使用了界限检查的.at(),则会立即抓到。

要解决此问题,您可以用+=操作员将其附加到字符串:

ss += name[i];

或者您可以使用push_back()

ss.push_back(name[i]);

此外,而不是检查每个。单身的。角色,我强烈建议您以更好的方式看这个答案。

问题在您的时循环中,很容易解决:

ss += name[i];

您只需要连接到字符串