boost::tokenizer 考虑分隔符之间没有标记
boost::tokenizer to consider absence of tokens between separators
我正在使用 boost::tokenizer 获取“;” string
中的分隔字段。
我能够检索如下代码所示的字段,但我有 2 个问题:
- tokenizer 是否提供任何函数来根据提供的分隔符了解字符串中的标记数?
- 假设测试字符串有3个字段
a;b;c
。下面的一段代码将打印所有这些。但我也需要打印空白字段。例如。如果是字符串 a;;;b;c
,令牌还应包含 nothing 作为第二和第三个元素。或者换句话说,第二个和第三个标记应该是空的。
#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);
我正在使用 boost::tokenizer 获取“;” string
中的分隔字段。
我能够检索如下代码所示的字段,但我有 2 个问题:
- tokenizer 是否提供任何函数来根据提供的分隔符了解字符串中的标记数?
- 假设测试字符串有3个字段
a;b;c
。下面的一段代码将打印所有这些。但我也需要打印空白字段。例如。如果是字符串a;;;b;c
,令牌还应包含 nothing 作为第二和第三个元素。或者换句话说,第二个和第三个标记应该是空的。
#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);