Lex*_*con 9 c++ boost tokenize boost-tokenizer
对你们来说应该很容易.....
我正在玩使用Boost的tokenizer,我想创建一个逗号分隔的令牌.这是我的代码:
string s = "this is, , , a test";
boost::char_delimiters_separator<char> sep(",");
boost::tokenizer<boost::char_delimiters_separator<char>>tok(s, sep);
for(boost::tokenizer<>::iterator beg= tok.begin(); beg!=tok.end(); ++beg)
{
cout << *beg << "\n";
}
Run Code Online (Sandbox Code Playgroud)
我想要的输出是:
This is
a test
Run Code Online (Sandbox Code Playgroud)
我得到的是:
This
is
,
,
,
a
test
Run Code Online (Sandbox Code Playgroud)
更新
Cap*_*liC 14
您必须将分隔符分配给tokenizer!
boost::tokenizer<boost::char_delimiters_separator<char>>tok(s, sep);
Run Code Online (Sandbox Code Playgroud)
另外,使用char_separator替换已弃用的char_delimiters_separator:
string s = "this is, , , a test";
boost::char_separator<char> sep(",");
boost::tokenizer< boost::char_separator<char> > tok(s, sep);
for(boost::tokenizer< boost::char_separator<char> >::iterator beg = tok.begin(); beg != tok.end(); ++beg)
{
cout << *beg << "\n";
}
Run Code Online (Sandbox Code Playgroud)
请注意,还有一个模板参数不匹配:输入这样复杂的类型是很好的习惯:所以最终的版本可能是:
string s = "this is, , , a test";
boost::char_separator<char> sep(",");
typedef boost::tokenizer< boost::char_separator<char> > t_tokenizer;
t_tokenizer tok(s, sep);
for (t_tokenizer::iterator beg = tok.begin(); beg != tok.end(); ++beg)
{
cout << *beg << "\n";
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13557 次 |
最近记录: |