在日常開發中經常會遇到分割字符串的要求,boost庫為我們提供了一個方便的分詞器——boost::tokenizer。現在就讓我們學習一下boost庫的分詞器。
- #include <string>
- #include <iostream>
-
- #include <boost/format.hpp>
- #include <boost/tokenizer.hpp>
- #include <boost/algorithm/string.hpp>
-
- int _tmain(int argc, _TCHAR* argv[])
- {
- // 待分割的字符串
- std::string strTag = _T("I Come from China");
- // 定義分割方式為英文逗號,中文逗號和空格,構造一個分詞器,
- boost::char_separator<char> sep(" ,,");
- typedef boost::tokenizer<boost::char_separator<char> >
- CustonTokenizer;
- CustonTokenizer tok(strTag,sep);
-
- // 輸出分割結果
- std::vector<std::string> vecSegTag;
- for(CustonTokenizer::iterator beg=tok.begin(); beg!=tok.end();++beg)
- {
- vecSegTag.push_back(*beg);
- }
-
- for (size_t i =0;i<vecSegTag.size();i++)
- {
- std::cout<<vecSegTag[i]<<std::endl;
- }
-
- // 嘗試下分割中文字符
- vecSegTag.clear();
- std::string strTag2 = _T("我叫小明,你呢,今天天氣不錯");
- CustonTokenizer tok2(strTag2,sep);
- for(CustonTokenizer::iterator beg=tok2.begin(); beg!=tok2.end();++beg)
- {
- vecSegTag.push_back(*beg);
- }
-
- for (size_t i =0;i<vecSegTag.size();i++)
- {
- std::cout<<vecSegTag[i]<<std::endl;
- }
-
- getchar();
- return 0;
- }