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

anu*_*g86 2 c++ boost boost-tokenizer

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

  1. 是否存在任何令牌器提供的函数,以根据提供的分隔符知道字符串中的令牌数量?
  2. 假设测试字符串有3个字段a;b;c.以下代码将打印所有这些代码.但我也需要打印空字段.例如柜面字符串的a;;;b;c令牌也应该包含什么作为第二和第三元素.或者换句话说,第二和第三个标记应该是空的.
#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;
    }
}
Run Code Online (Sandbox Code Playgroud)

For*_*veR 6

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

const size_t count = std::distance(tokens.begin(), tokens.end());
Run Code Online (Sandbox Code Playgroud)

2)你应该正确构造分隔符.

boost::char_separator<char> obj(";", "", boost::keep_empty_tokens);
Run Code Online (Sandbox Code Playgroud)

实例