增强标记器重新赋值

Boost tokenizer re-assignment

本文关键字:赋值 新赋值 增强      更新时间:2023-10-16

我必须从一个结构体中读取多个字符串,然后使用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 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 :