2

数字、単語、スペース、さらには引用符などの奇妙な文字を含む文字列のベクトルがあります。double を文字列から分離できるように、stringstream を使用してすべてを読み取ろうとしています。

私がこれを行うとき:

文字列ストリームが含まれています

4165 このパッケージには 12 1/2 インチのネジが含まれています

コード:

stringstream >> mydouble 
stringstream >> mystring

mydouble を含む

4165

次に、mystring に読み込まれる唯一のものは

このパッケージには12 1/2が含まれています

行全体を保持するにはどうすればよいですか?

時々私のファイルにはこれが含まれています:

4165 このパッケージには 2 1/2 インチのネジが含まれています

65 このパッケージには 12 > 1/2 インチのネジが含まれています

このパッケージには1本のネジが含まれています

4

1 に答える 1

3

残念ながら、ストリーム抽出オペレーター>>は、あなたがやりたいことを得意としていません。あなたが望むことをする正しい方法は、行全体を取得することです

std::getline(stringstream, myline);

次に、行を解析するコードを記述します。

行を解析する方法は? 次の 5 つのオプションが思い浮かびます。

  1. 特別なツールに頼らずに独自のコードを作成してください。
  2. Lex/Flex と Yacc/Bison を使用します。
  3. ブーストスピリットを使用。
  4. POSIX を使用し<regex.h>ます。
  5. C++11<regex>または TR1を使用し<tr1/regex>ます。

ただし、これらのどれも完全に自明ではありません。あなたが知りたいのであれば、あなたのアプリケーションのために、私はおそらく選択肢1、選択肢3、または選択肢5を選びます.あなたが何をしようと頑張ってください.

どこから始めればよいかわからない場合は、 で提示された と で提示された を調べてみstd::getline()ませ<string>std::atoi()<cstdlib>? これらは、次にどこに行くべきかについてのいくつかのアイデアを提供するはずです。

于 2012-06-01T04:54:25.293 に答える