std::vector<std::string> split ( const std::string &s ) {跟 Python 的 split 一樣,切割字元是三種空字元
using namespace boost::xpressive ;
sregex_token_iterator begin( s.begin(), s.end(), +_s, -1 ), end;
std::vector<std::string> v ;
std::copy( begin, end, std::back_inserter(v) );
return std::move(v) ;
}
split ( "A B C" ) ; // ["A", "B", "C"]
split ( "A BB\tCCC\n\nDDDD" ) ; // ["A", "BB", "CCC", "DDDD"]
' '
, '\t'
, 還有 '\n'
,而且連續的空白會被忽略。順帶提一下,這個函數不採用由外部傳入
std::vector<std::string>>
接收 tokens 的設計,而是用 std::move()
把結果傳出來,使用上更直覺簡單,感謝 C++0x 帶給 C++ 更強大的表述能力。