2012-05-06 18 views
0

C++のユーザー入力から未知の量の文字列を解析しようとしており、ベクトルに格納したいと考えています。C++の単語でユーザー入力の行を解析する

私は何をすべきかわかりません。

ので、利用者はこれを入力すると言う: マネーのLinux火災コンピュータ

私は各単語を取り、ベクターにそれを格納することができるようにしたいです。私はもともとこのようなものを持っていましたが、恐ろしく失敗しました。

while(in!="") 
{ 
    cin>>in; 
    input.push_back(in); 
} 

どこから始めたらよいでしょうか?

+1

それがどのように失敗したのか? –

+0

http://stackoverflow.com/questions/890164/how-can-i-split-a-string-by-a-delimiter-into-an-array – Tibor

+0

これは[文字列トークン化(または一部のフレームワークでは分割) ](http://stackoverflow.com/questions/236129/how-to-split-a-string-in-c)。 – user7116

答えて

0
string in; 
while (cin >> in) { 
    input.push_back(in); 
} 

ストリームの>>演算子がストリームを返します。 std :: istreamは、それが良好な状態にあるかどうかをチェックすることによってブール値に変換されます。入力の最後に達した場合、式はfalseとなり、次の読み込みになります。

抽出に失敗した場合、空の文字列はin引数に書き込まれないため、ループが機能しませんでした。

+0

EOFビットをセットしても、ストリームが 'false'に評価されることはありません。これは、*失敗ビット*です。 –

+0

それは理にかなっています。 EOFビットは最後に正常に読み込まれた後にセットされ、次の読み込みではvoid *演算子がNULLを返します。訂正してくれてありがとう。 – mgiuffrida

3

条件付きチェックの外で入力操作を使用しないでください。あなたのコードを書くための標準的な方法は、次のとおりです。

std::vector<std::string> result; 
for (std::string word; std::cin >> word;) { result.push_back(word); } 

(C++ 11では、あなたが代わりにresult.emplace_back(std::move(word));を言うことができます。)

関連する問題