提升标记化器重新分配

时间:2016-09-27 07:15:02

标签: c++ boost

我必须从结构中读取多个字符串,然后使用 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:我尝试了上述两种方法但都失败了。

1 个答案:

答案 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 :