重複の可能性:
C++ での文字列の分割
分割機能が必要です。
次のように動作する必要があります。
buffer = split(str, ' ');
私は分割機能を検索し、ブーストライブラリを試しましたが、すべてうまくいきません:/
重複の可能性:
C++ での文字列の分割
分割機能が必要です。
次のように動作する必要があります。
buffer = split(str, ' ');
私は分割機能を検索し、ブーストライブラリを試しましたが、すべてうまくいきません:/
標準 C ライブラリの strtok() は非常に優れており、探していることを実行します。複数のスレッドから使用することに熱心で、関数が再入可能ではないことを心配していない限り、ここではそうではないと思います。
PS上記は、入力として文字配列があることを前提としています。それが c++ 文字列の場合でも、strtok を使用する前に string.c_str を使用して c 文字列を取得できます。
ブーストライブラリも同様に機能するはずです 。
次のように使用します。
vector <string> buffer;
boost::split(buffer, str_to_split, boost::is_any_of(" "));
追加:
必ずアルゴリズムを含めてください:
#include <boost/algorithm/string.hpp>
次のように std::cout に出力します。
vector<string>::size_type sz = buffer.size();
cout << "buffer contains:";
for (unsigned i=0; i<sz; i++)
cout << ' ' << buffer[i];
cout << '\n';
私strtok()
はあなたが探しているものだと思います。
指定された文字で区切られた最初の部分文字列を常に返すことができます。
char *string = "Hello World!";
char *part = strtok(string, " "); // passing a string starts a new iteration
while (part) {
// do something with part
part = strtok(NULL, " "); // passing NULL continues with the last string
}
このバージョンは、一度に複数のスレッドで使用してはならないことに注意してください (並列化された環境で動作させるための追加パラメーターを持つバージョン ( strtok_s()
、詳細はこちら) もあります)。これは、ループ内で部分文字列を分割したい場合にも当てはまります。