gpt4 book ai didi

c++ - std::search on single-pass 范围

转载 作者:可可西里 更新时间:2023-11-01 17:59:07 25 4
gpt4 key购买 nike

我想从 std::istream 中读取数据,直到找到特定的字符序列,即我想实现以下接口(interface):

void read_until (std::istream &is, std::string_view needle);

使用 std::istreambuf_iterator,我相信这相当于 std::search 在单遍迭代器上的组合。不幸的是,std::boyer_moore_searcher 需要随机访问迭代器。

是否有任何使用 C++ 标准库(以及与 sv 的大小成比例的内存)的上述接口(interface)的任何简单实现,还是我必须自己编写代码?

最佳答案

void read_until (std::istream &is, std::string_view needle) {
if (needle.size()==0) return;
std::string buff;
buff.reserve(needle.size());
auto it = std::find_if( std::istream_iterator<char>(is), std::istream_iterator<char>(), [&](char c) {
buff.push_back(c);
if (buff.size() < needle.size()) {
return false;
}
if (buff == needle)
return true;
buff.erase(buff.begin());
return false;
});
}

这是我使用 std 算法所能做的最好的事情。

为了优化,使用循环 buff 可能会节省一些工作。

关于c++ - std::search on single-pass 范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48997403/

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