将元音与字符串数据类型的字符串分开,并将其存储在新字符串中

时间:2017-06-12 09:05:46

标签: c++ string

#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时,会打印正确的输出。我想知道为什么??

1 个答案:

答案 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())