2016-09-09 5 views
3

私はHacker Rankの割り当てに取り組んでいて、文字列をintに変換する方法が必要で、stringstreamを使用することに決めました。何らかの方法で同じ宣言されたstringstramを使用する方法はありますか(それはあなたがそれをどのように呼び出すかです)、各変換に対して新しいものを作成するのではなく、私は.clear()関数を使ってみましたが、それでも動作しませんでした。複数の変換の文字列ストリームをクリアして再利用

stringstream s0(hour); // this is my way of converting string to int because stoi doesn't seem to work 
s0 >> i_hour; 
cout << i_hour << endl; 
stringstream s1(minute); 
s1 >> i_minute; 
stringstream s2(second); 
s2 >> i_second;` 

とどのように私はそれをやってみたかった:私はそれをやった方法

stringstream ss(hour); 
ss >> i_hour; 
ss.clear(); 
ss << minute; 
ss >> i_minute; 

は、同様にそれを行うにはどのような方法はありますか?新しいものを宣言し続けるのは本当に面倒です。

+1

さらに優れた: 'std :: stoi'。 –

答えて

2

str(s)メソッドを呼び出してstd::istringstreamを新しい文字列に初期化することができます。文字列から変換するだけの場合は、std::istringstreamを使用する必要があります。

以前の変換でエラーが発生した場合は、エラー状態をクリアするためにclear()も必要です。

だからあなたの例では、次のようになります。

istringstream ss(hour); 
ss >> i_hour; 
ss.clear(); 
ss.str(minute); 
ss >> i_minute; 
+0

申し訳ありませんが、助けていただきありがとうございます。 –

2

使用

ss.str(""); 

ストリームをクリアします。 ss.clear()は、フラグのみをリセットします。

+0

これは解決策のようです:) –

+0

@Arūnas:Ups、yes、double post :-) – Klaus

関連する問題