boost :: tokenizer考虑分隔符之间没有令牌

时间:2015-10-29 12:24:30

标签: c++ boost boost-tokenizer

我正在使用boost :: tokenizer来获取&#39 ;;'从string分隔的字段。 我可以检索下面代码中显示的字段,但我有两个问题:

  1. 是否有任何令牌器提供的函数可以根据提供的分隔符知道字符串中的令牌数量?
  2. 假设测试字符串有3个字段a;b;c。以下代码将打印所有这些代码。但我也需要打印空字段。例如。如果字符串为a;;;b;c,则该标记还应包含 nothing 作为第2和第3个元素。或者换句话说,第二和第三个标记应该是空的。
  3. #include <boost/tokenizer.hpp>
    namespace std;
    namespace boost;
    int main()
    {
        string data="a;;;;b;c";
        boost::char_separator<char> obj(";");
        boost::tokenizer<boost::char_separator<char> > tokens(data,obj);
        cout<<endl<<tokens.countTokens();
        for(boost::tokenizer<boost::char_separator<char> >::iterator it=tokens.begin();
        it!=tokens.end();
        ++it)
        {
            std::cout<<*it<<endl;
        }
    }
    

1 个答案:

答案 0 :(得分:6)

1)你可以计算结束和开始之间的差异。

const size_t count = std::distance(tokens.begin(), tokens.end());

2)你应该正确构建分隔符。

boost::char_separator<char> obj(";", "", boost::keep_empty_tokens);

Live example