gpt4 book ai didi

c++ - Boost::tokenizer 点分开,但也保留空字段

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:12 25 4
gpt4 key购买 nike

我看过this question和我的很像,但是又不一样,所以请不要标为重复。

我的问题是:如何从字符串中获取空字段?

我有一个类似 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 << "> ";
}

但我得到 <This> <.> <is> <.> <> <.> <a> <test> .

最佳答案

Boost.Tokenizer 的 char_separator 的第二个参数是 kept_delims 参数。它用于指定将显示为标记的分隔符。原始代码指定 "." 应作为标记保留。要解决此问题,请更改:

ChSep sep(".", ".", boost::keep_empty_tokens);

到:

ChSep sep(".", "", boost::keep_empty_tokens);
// ^-- no delimiters will show up as tokens.

这是一个完整的例子:

#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;
}

产生所需的输出:

<This> <is> <> <a> <test> 

关于c++ - Boost::tokenizer 点分开,但也保留空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22331648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com