c++ - boost tokenizer 的随机行为

标签 c++ boost boost-tokenizer

我在使用 boost tokenizer 时遇到问题,这是我的代码:

#include <iostream>
#include <vector>
#include <boost/tokenizer.hpp>

using namespace std;

static vector<std::string> tokenize(const std::string& input, const char delim) {
    std::cout << "Tokenize: " << input << std::endl;
    vector<std::string> vector;
    typedef boost::char_separator<char> TokenizerSeparator;
    typedef boost::tokenizer<TokenizerSeparator> Tokenizer;
    TokenizerSeparator separator(&delim);
    Tokenizer tokenizer(input, separator);
    Tokenizer::iterator iterator;

    for(iterator=tokenizer.begin(); iterator!=tokenizer.end();++iterator){
        std::cout << "elem found: " + *iterator << std::endl;
        vector.push_back(*iterator);
    }
    return vector;
}

int main(int argc, const char * argv[])
{
    string input = "somedata,somedata,somedata-somedata;more data;more data";
    vector<string> list = tokenize(input, ';');

    return 0;
}

此代码的行为并非始终一致。有时它有效,有时多次运行时无效。当它在这里不起作用时,我得到一个输出:

Tokenize: somedata,somedata,somedata-somedata;more data;more data
elem found: some
elem found: ata,some
elem found: ata,some
elem found: ata-some
elem found: ata
elem found: more 
elem found: ata
elem found: more 
elem found: ata

我做错了什么?

谢谢。

最佳答案

TokenizerSeparator separator(&delim);

您正在根据字符存储的地址而不是字符的值进行分词。

关于c++ - boost tokenizer 的随机行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10973172/

相关文章:

c++ - 将代码块中的所有输出流式传输到 C++ 中的文本文件

c++ - 如何在 Ubuntu 上构建和安装需要单独构建和安装的 Boost 库

c++ - 使用 boost::serialization 序列化递归图结构时如何防止堆栈溢出?

c++ - 将 boost::tokenizer 与 boost::iterator_range 结合使用

c++ - 在 boost::lockfree:queue 默认构造函数的情况下断言失败

C++ - 使用来自不同头文件、相同命名空间的枚举

c++ - 如何使用 cytpes 将 int 列表的列表从 python 传递给 C++ 函数

c++ - WM_LBUTTONDOWN、WM_COMMAND 和 WM_CLOSE 等 Windows 消息在 win32 C/C++ API 中定义在哪里?

c++ - 我应该如何在 C++ 中读取和解析(真实的、正确的、全功能的)CSV?

c++ - 在 Switch 案例中标记字符串