c++ - boost 分词器重新分配

标签 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 tok(str1, sep);
...

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

PS:上面两个我都试过了,都失败了。

最佳答案

使用assign成员函数分配一个新的 token 源。

#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 : 

关于c++ - boost 分词器重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39718356/

相关文章:

c++ - 代码执行派生类方法,但从基类方法获取默认参数

c++ - 由于捕获缓冲区,OpenCV VideoCapture 滞后

c++ - 具有自定义标量类型的特征值 : Matrix multiplication with custom type fails with `use of overloaded operator ' *' is ambiguous`

c++ - cpp_dec_float_50 的精度是多少?

c++ - 将 float ( double )转换为字符串

c++ - 从指针 vector 中删除内容

c++ - strncpy 没有按预期工作

c++ - 如何在 *.cpp 文件中实现静态类成员函数?

c++ - 创建一个boost::thread并将其传递给HANDLE

c++ - Boost::Beast 非阻塞读取 Websockets?