我必须从结构中读取多个字符串,然后使用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 tok(str1, sep);
...

// tok(str2, sep); or tok = Tokenizer(str2, sep)


PS:我尝试了以上两种方法,但均失败了。

最佳答案

使用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 :

10-06 05:12