#include<iostream>
using namespace std;
int main()
{
int i=0,j=0;
string a,v;
cin>>a;
while(a[i]!='\0')
{
if(a[i]=='a' || a[i]=='e' || a[i]=='i' || a[i]=='o' || a[i]=='u' )
{
v[j]=a[i];
j++;
}
i++;
}
cout<<v;
return 0;
}
当我尝试打印v时,没有任何内容被打印出来,我不知道为什么! 但是,当我尝试使用while循环遍历每个字符来打印v时,会打印正确的输出。我想知道为什么??
答案 0 :(得分:1)
使用.at()而不是[],它会进行边界检查,并且可能会为您检测到此错误。
你的问题是你有一个字符串&#39; v&#39;未确定的空间,您将附加到&#39; v&#39;。
的任意索引解决方案是将附加到v的代码替换为:
v += a.at(i);
有了这个,你还以第二个itterator j的形式删除了一些复杂性。
OR
您可以在v中保留空间,以便[index]操作起作用。所以在开始时你可以这样做:
cin>>a;
v.reserve(a.size())