gpt4 book ai didi

c++ - 从 Boost::Tokenizer 中删除重复项?

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

我试图拆分一个逗号分隔的字符串,然后对每个标记执行一些操作,但忽略重复项,所以……。按照以下几行:

int main(int, char**)
{
string text = "token, test string";

char_separator<char> sep(", ");
tokenizer< char_separator<char> > tokens(text, sep);
// remove duplicates from tokens?
BOOST_FOREACH (const string& t, tokens) {
cout << t << "." << endl;
}
}

有没有办法在 boost::tokenizer 上做到这一点?

我知道我可以使用 boost::split 和 std::unique 解决这个问题,但想知道是否也有一种方法可以使用分词器来实现这个问题。

最佳答案

boost.tokenizer 可以做很多很酷的事情,但它不能做这个,答案确实是“不”。

如果您只想删除相邻的重复项,boost.range 可以帮助它变得无缝:

#include <iostream>
#include <string>
#include <boost/range/adaptor/uniqued.hpp>
#include <boost/foreach.hpp>
#include <boost/tokenizer.hpp>

using namespace boost;
using namespace boost::adaptors;
int main()
{
std::string text = "token, test string test, test test";

char_separator<char> sep(", ");
tokenizer< char_separator<char> > tokens(text, sep);
BOOST_FOREACH (const std::string& t, tokens | uniqued ) {
std::cout << t << "." << '\n';
}
}

这打印:

token.
test.
string.
test.

为了仅对全局唯一 token 执行某些操作,您将需要以某种方式存储状态。最简单的解决方案可能是中间集:

char_separator<char> sep(", ");
tokenizer< char_separator<char> > tokens(text, sep);
std::set<std::string> unique_tokens(tokens.begin(), tokens.end());
BOOST_FOREACH (const std::string& t, unique_tokens) {
std::cout << t << "." << '\n';
}

关于c++ - 从 Boost::Tokenizer 中删除重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13528841/

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