the*_*oon 4 c++ boost tokenize
我已经看到了这个问题而且我的问题与它非常相似,但它有所不同,所以请不要将其标记为重复.
我的问题是:如何从字符串中获取空字段?
我有一个字符串std::string s = "This.is..a.test";,我想得到字段<This> <is> <> <a> <test>.
我也试过了
typedef boost::char_separator<char> ChSep;
typedef boost::tokenizer<ChSep> TknChSep;
ChSep sep(".", ".", boost::keep_empty_tokens);
TknChSep tok(s, sep);
for (TknChSep::iterator beg = tok.begin(); beg != tok.end(); ++beg)
{
std::cout << "<" << *beg << "> ";
}
Run Code Online (Sandbox Code Playgroud)
但我明白了<This> <.> <is> <.> <> <.> <a> <test>.
Boost.Tokenizer的第二个参数char_separator是kept_delims参数.它用于指定将显示为标记的分隔符.原始代码指定"."应保留为令牌.要解决此问题,请更改:
ChSep sep(".", ".", boost::keep_empty_tokens);
Run Code Online (Sandbox Code Playgroud)
至:
ChSep sep(".", "", boost::keep_empty_tokens);
// ^-- no delimiters will show up as tokens.
Run Code Online (Sandbox Code Playgroud)
这是一个完整的例子:
#include <iostream>
#include <string>
#include <boost/foreach.hpp>
#include <boost/tokenizer.hpp>
int main()
{
std::string str = "This.is..a.test";
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
boost::char_separator<char> sep(
".", // dropped delimiters
"", // kept 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)
这产生了所需的输出:
<This> <is> <> <a> <test>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2099 次 |
| 最近记录: |