2

我正在使用 boost::tokenizer 来获取 ';' 从 a 中分离字段string。我能够检索如下代码所示的字段,但我有 2 个问题:

  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;
    }
}
4

1 回答 1

7

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

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

2)您应该正确构造分隔符。

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

活生生的例子

于 2015-10-29T12:48:41.920 回答