说明:本文是boost::tokenizer类的整理,原文出处为boost的document,此处仅作学习笔记之用。
1、boost::tokenizer
boost::tokenizer提供了一种灵活、易用的方式来将一个字符串分解为一个字符串列表。这是个模板类,类的声明为:
它的核心包括,template < class TokenizerFunc = char_delimiters_separator<char>, class Iterator = std::string::const_iterator, class Type = std::string > class tokenizer
- TokenizerFunc:决定了字符串分割方式
- Iterator:确定分割后的字符串的迭代类型
- Type:需要分割的字符串类型
tokenizer(Iterator first, Iterator last,const TokenizerFunc& f = TokenizerFunc()) template<class Container> tokenizer(const Container& c,const TokenizerFunc& f = TokenizerFunc())
其中参数的意义如下:
参数 |
描述 |
c | 一个包含被分解的序列的容器。注:c.begin() 和 c.end() 必须可以转换为模板参数 Iterator. |
f | 一个符合 TokenizerFunction 的函数对象,用于对序列进行分解。 |
first | 迭代器,表示被分解序列的开始位置。 |
last | 迭代器,表示被分解序列的末尾位置。 |
#include<iostream>
#include<boost/tokenizer.hpp>
#include<string>
int main(){
using namespace std;
using namespace boost;
string s = "This is, a test";
tokenizer<> tok(s);
//tokenizer通过迭代器来访问分割后的字符序列,字符分割是在遍历过程中进行的,而不是构造函数
for(tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
cout << *beg << "\n";
}
}
tokenizer中使用的TokenFunc在boost标准中有其他3个实现,它们分别有不同的分割规则:
- char_seperator :根据分隔符进行分割,可以包含多个分割字符
- escaped_list_seperator:用于对csv文件进行分割
- offset_seperator:根据偏移量进行分割
2、boost::char_seperator
char_separator
类基于字符分隔符来分解一个字符序列,就象