我正在使用boost :: tokenizer来获取&#39 ;;'从string
分隔的字段。
我可以检索下面代码中显示的字段,但我有两个问题:
a;b;c
。以下代码将打印所有这些代码。但我也需要打印空字段。例如。如果字符串为a;;;b;c
,则该标记还应包含 nothing 作为第2和第3个元素。或者换句话说,第二和第三个标记应该是空的。#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;
}
}
答案 0 :(得分:6)
1)你可以计算结束和开始之间的差异。
const size_t count = std::distance(tokens.begin(), tokens.end());
2)你应该正确构建分隔符。
boost::char_separator<char> obj(";", "", boost::keep_empty_tokens);