为什么我按字符串填充元素的长度为零? [关闭]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么我按字符串填充元素的长度为零? [关闭]相关的知识,希望对你有一定的参考价值。
这是我的问题。我用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 name\n";
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()
进行边界检查,那么您会立即抓住它。
要解决此问题,您可以使用+=
operator追加到字符串:
ss += name[i];
或者你可以使用push_back()
:
ss.push_back(name[i]);
而且,而不是检查每一个。单。性格,我强烈建议你看看this answer更好的方式。
另一答案
问题出在你的while循环中,并且很容易修复:
ss += name[i];
您只需要连接到您的字符串
以上是关于为什么我按字符串填充元素的长度为零? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章