0

重複の可能性:
C++ での文字列の分割

スペースで区切られた一連の単語を配列に読み込むにはどうすればよいですか?

次の文があるとします。

「カエルが好き」

そして、この配列:

string mySentenceArray[2]

作りたい

mySentenceArray[0] = I
mySentenceArray[1] = like
mySentenceArray[2] = frogs

例として。(私が今書いた文をハードコーディングするように誰も言わないでください。これは例です。)

4

4 に答える 4

0

いくつかの方法があります。

  1. strtokを使用します。ただし、これはC関数であり、C++ではありません。CとC++の混合は悪いスタイルです。さらにstrtok、関数はスレッドセーフではありません。

  2. std :: string::findメソッドのいずれかを使用します。それは複雑です。

  3. std::stringstreamクラスを使用します。あまりにも多くのステップが必要です。

  4. boost :: Algorithm :: string::splitを使用します。私はこの方法が好きです。シンプルで高速です。

于 2012-10-03T03:18:29.740 に答える
0

標準ライブラリのみを使用する:

istringstream sentence("I like frogs");
vector<string> words(
    (istream_iterator<string>(sentence)), 
    (istream_iterator<string>()));

コンストラクター引数の少なくとも1つには、不必要に見える括弧が実際に必要であることに注意してください。そうしないと、最も厄介なparseに悩まされることになります。

あるいは、Boostは次のようないくつかの便利な文字列アルゴリズムを提供しsplitます。

string sentence("I like frogs");
vector<string> words;
boost::algorithm::split(words, sentence, boost::algorithm::is_space());
于 2012-10-03T04:05:13.017 に答える
0

文字列を一連のトークンに変換し、それらのトークンを配列に入れることができます。これを考慮してください:http://www.cplusplus.com/reference/clibrary/cstring/strtok/

于 2012-10-03T03:05:40.583 に答える
0

追加のライブラリを追加することを正当化する他の用途がない限り、おそらくstringstream:

std::istringstream buffer("I like frogs");

std::vector<std::string> words((std::istream_iterator<std::string>(buffer)), 
                                std::istream_iterator<std::string>());

std::copy(words.begin(), words.end(), 
          std::ostream_iterator<std::string>(std::cout, "\n"));
于 2012-10-03T03:59:59.657 に答える