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

  • tokenizer是否提供任何功能来根据提供的分隔符知道字符串中的 token 计数?
  • 假设测试字符串具有3个字段a;b;c。以下代码将打印所有代码。但是我也需要打印空白字段。例如。如果是字符串a;;;b;c,则 token 也应不包含任何第二和第三元素。换句话说,第二和第三 token 应该为空。

  • #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)您可以只计算结束和开始之间的差异。

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

    2)您应该只构造分隔符。
    boost::char_separator<char> obj(";", "", boost::keep_empty_tokens);
    

    Live example

    09-04 07:37
    查看更多