BOOST/tokenizer会忽略连续的分隔符

Dab*_*uto 4 c++ boost

我正在使用BOOST/tokenizer来分割字符串.它适用于像"1,2,3"这样的字符串,但是当有两个或多个连续的分隔符时,例如"1,,3,4",它返回"1","3","4".

有没有办法让tokenizer返回一个空字符串""而不是跳过它?

Tan*_*ury 6

Boost.Tokenizer的char_separator类提供输出空标记或跳过其empty_tokens参数的选项.它默认为boost::drop_empty_tokens匹配行为strtok(),但可以通过提供输出空标记来告诉它boost::keep_empty_tokens.

例如,使用以下程序:

#include <iostream>
#include <string>
#include <boost/foreach.hpp>
#include <boost/tokenizer.hpp>

int main()
{
  std::string str = "1,,3,4";
  typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
  boost::char_separator<char> sep(
      ",", // dropped delimiters
      "",  // keep delimiters
      boost::keep_empty_tokens); // empty token policy

  BOOST_FOREACH(std::string token, tokenizer(str, sep))
  {
    std::cout << "<" << token << "> ";
  }
  std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

<1> <> <3> <4> 
Run Code Online (Sandbox Code Playgroud)