我必须从结构中读取多个字符串,然后使用 boost tokenizer 对它们进行标记。基本上我现在的是这个:
typedef boost::tokenizer<boost::char_separator<char> > Tokenizer;
boost::char_separator<char> sep(";");
Tokenizer tok1(str1, sep);
...
Tokenizer tok2(str2, sep);
...
Tokenizer tok3(str3, sep);
.....
请注意,我每次都在创建一个新的tokenizer对象。是否可以仅使用一个tokenizer对象来执行此操作?像这样:
Tokenizer tok(str1, sep);
...
// tok(str2, sep); or tok = Tokenizer(str2, sep)
PS:我尝试了上述两种方法但都失败了。
答案 0 :(得分:2)
使用assign
成员函数分配新的令牌源。
#include<iostream>
#include<boost/tokenizer.hpp>
#include<string>
void test(boost::tokenizer<>& tok)
{
for(boost::tokenizer<>::iterator beg=tok.begin(); beg!=tok.end();++beg){
std::cout << *beg << " : ";
}
std::cout << '\n';
}
int main()
{
std::string s = "This is, a test";
boost::tokenizer<> tok(s);
test(tok);
tok.assign(s);
test(tok);
tok.assign(s);
test(tok);
}
预期产出:
This : is : a : test :
This : is : a : test :
This : is : a : test :