我正在使用BOOST/tokenizer来分割字符串.它适用于像"1,2,3"这样的字符串,但是当有两个或多个连续的分隔符时,例如"1,,3,4",它返回"1","3","4".
有没有办法让tokenizer返回一个空字符串""而不是跳过它?
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)