Boost String Algorithms Libraryというものを使います。
以下、文字列をsplitする例です。「,」をデリミタとして使います。
#include <iostream> #include <string> #include <vector> #include <boost/algorithm/string.hpp> using namespace std; int main() { string strTarget = "left,right,,one,two"; vector<string> vResult; boost::algorithm::split( vResult, strTarget, boost::is_any_of(",") ); cout << "vResult[0]=" << vResult[0] << endl; cout << "vResult[1]=" << vResult[1] << endl; cout << "vResult[2]=" << vResult[2] << endl; cout << "vResult[3]=" << vResult[3] << endl; cout << "vResult[4]=" << vResult[4] << endl; return 0; }
上記の実行結果
vResult[0]=left vResult[1]=right vResult[2]= vResult[3]=one vResult[4]=two
is_any_ofは、いずれか一つにマッチしたらsplitするという意味です。
今回はデリミタを「,」のみにしているので「,」のみで区切られますが、
デリミタを複数指定することも可能です。
以下、複数の例です。「,」と「¥」をデリミタに指定します。(ヘッダは省略します)
int main() { string strTarget = "left,right\\,one\\two"; vector<string> vResult; boost::algorithm::split( vResult, strTarget, boost::is_any_of(",\\") ); cout << "vResult[0]=" << vResult[0] << endl; cout << "vResult[1]=" << vResult[1] << endl; cout << "vResult[2]=" << vResult[2] << endl; cout << "vResult[3]=" << vResult[3] << endl; cout << "vResult[4]=" << vResult[4] << endl; return 0; }
上記の実行結果
vResult[0]=left vResult[1]=right vResult[2]= vResult[3]=one vResult[4]=two