Boost String Algorithms Library
Boost String Algorithms Library
ちょっとづつ更新
名前空間/ヘッダ
boost::algorithm
長いのでbaと記述する
#include<boost/algorithm/string.hpp> namespace ba = boost::algorithm;
ba::split(&Result, &Input, Pred, eCompress = token_compress_off)
Pred(セパレータ)の文字で、文字列Inputを分割して、結果をResultに入れる。
Predには、空白区切りならba::is_space(),
(複数の)1文字デリミタを使うならba::is_any_of()を使う。
空文字列を切り詰めるならba::token_compress_onを指定。
デフォルトでba::token_compress_offが指定されている。
string original = " \tABC DEFG HIJKL MNOPQ RSTU \t VWXYZ \t"; vector<string> res; cout << "split(res,original,is_space())\n\t→"; ba::split( res, original, ba::is_space() ); for(size_t i=0; i < res.size(); ++i) cout << "[" << res[i] << "]"; cout<<endl; cout << "split(res,original,is_any_of(\" \\tU\"))\n\t→"; ba::split( res, original, ba::is_any_of(" \tU") ); for(size_t i=0; i < res.size(); ++i) cout << "[" << res[i] << "]"; cout<<endl; cout << "split(res,original,is_any_of(\" \\tU\"),token_compress_on)\n\t→"; ba::split( res, original, ba::is_any_of(" \tU"), ba::token_compress_on ); for(size_t i=0; i < res.size(); ++i) cout << "[" << res[i] << "]"; cout<<endl;
結果
ありゃ?token_compress_onしても最初と最後の空文字列が残ってるぞ。
Boost.Tokenizerのdrop_empty_tokensはちゃんと切り詰められていたけど...
split(res,original,is_space()) →[][][ABC][DEFG][HIJKL][MNOPQ][RSTU][][][VWXYZ][][] split(res,original,is_any_of(" \tU")) →[][][ABC][DEFG][HIJKL][MNOPQ][RST][][][][VWXYZ][][] split(res,original,is_any_of(" \tU"),token_compress_on) →[][ABC][DEFG][HIJKL][MNOPQ][RST][VWXYZ][]