2017-12-18 21 views
2

"2,33,5" - > 2 33のようなコンマの間にintegeresが見つかります。5. "0,12,4"のような文字列を置くと問題が発生します。 stringstreamはtmpに0を入れるべきではないので、ループは最初はwhile(0)のようでしたか?Stringstream C++ whileループ

vector<int> parseInts(string str) { 
stringstream ss(str); //getting string 
vector<int> result; 
char ch; 
int tmp; 
while(ss >> tmp) {  //while(IS IT INTEGER ALREADY OR NOT?) 
    result.push_back(tmp); 
    ss >> ch;   
} 
return result; 
+0

あなたは空白に行きます。 –

+0

@JakeFreemanサンプル入力を詳しく見てください。空白はありません。 –

+0

'>>問題はなぜ" 0,12,4 "のような文字列を置くのが問題なのですか?なぜそれが問題なのですか?あなたはそれが0を読みたくないのですか? –

答えて

2

ループが最初でしばらく(0)のようなものだったようにstringstreamはTMPに0を置くべきではないのですか?

while条件はss >> tmpです。 cinのドキュメントを見ると、operator>>()istream&を返します。 ではなく、は今読み込んだ入力を返します。この場合はintの値は0です。また

istream(またはそれの基底クラスの1つ)istreamオブジェクトが暗黙的に、boolwhile文の条件の結果として必要なタイプを変換することを可能にするoperator bool()をオーバーロード。 operator>>()の呼び出し中にエラーが発生すると、istreamオブジェクトはfalseと評価されます。エラーがなければ、trueと評価されます。

入力0が有効なintであるため、whileループは次の繰り返しを続けます。

+0

uミスター、ありがとう、私のすべての疑いを払拭してくれてありがとう。 –