2017-06-12 5 views
1
#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

このプログラムの動作は未定義です。あなたが 'v '(v [j]')を使ってループしているときに 'v'が空の場合、' a'だけが内容を持ちます( 'cin >> a;'から) – Borgleader

+0

未定義の振る舞いです。 'std :: string'の範囲外要素へのアクセス。 –

+0

ですが、割り当てに問題があった場合、 'int i = 0;を使用すると正しい出力がどのように出力されますか? while(v [i]!= '\ 0'){cout << v [i];私は+ +; } '@Borgleader –

答えて

1

[]の代わりに.at()を使用すると、境界チェックが行われ、このエラーが検出された可能性があります。

あなたの問題は、文字列 'v'に未定義スペースがあり、 'v'の任意のインデックスに追加していることです。

ソリューションをするには、Vに追加するコードを交換することになる次のいずれか

v += a.at(i); 

そして、これであなたも、第2 itterator jの形で複雑なビットを削除しました。

または

vでスペースを予約すると、[インデックス]操作が機能します。だから最初は次のようにすることができます:

cin>>a; 
    v.reserve(a.size()) 
関連する問題