gpt4 book ai didi

c++ - 在 C++11 中,如何查找并返回以给定字符串开头的字符串 vector 中的所有项?

转载 作者:行者123 更新时间:2023-12-01 14:36:41 28 4
gpt4 key购买 nike

(注意:当我提到 vector 时,我指的是 vector 提供的 <vector> 类。)

问题

给定一个字符串 x和一个字符串 vector ,如何检索 vector 中以 x 开头的字符串?最好采用省时的方式?

也就是说,如果x"apple" vector 是vector<string> foods = {"apple pie","blueberry tarts","cherry cobbler"} , 那么它应该返回 "apple pie"以某种身份。

我正在使用 C++11 并且我不是这方面的专家,因此非常感谢简单的答案和解释。如果答案很明显,请原谅我 - 我对这门语言还比较陌生。

我考虑过的可能解决方案

显而易见的解决方案是创建一个迭代器并遍历 vector 中的每个字符串,使用 rfind 的重载版本提取以给定字符串开头的所有项目。有 pos范围。 (也就是像这样:str.rfind("start",0))

然而,对于一个大 vector ,这是时间效率低下的,所以我想知道是否有更好的方法来做到这一点,即对 vector 进行排序并使用某种二进制搜索,或者可能修改 find方法来自 <algorithm>

最佳答案

复制所需字符串的最简单方法是简单的线性扫描。例如,使用标准库 std::copy_if执行复制和 lambda 来封装“开始于”字符串比较。

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

int main()
{
std::vector<std::string> foods = { "apple pie","blueberry tarts","cherry cobbler" };

std::string prefix{ "apple" };
auto starts_with = [&prefix](const std::string &str) {
return str.compare(0, prefix.size(), prefix) == 0;
};

std::vector<std::string> result;
std::copy_if(begin(foods), end(foods), back_inserter(result), starts_with);

for (const auto &str : result) {
std::cout << str << '\n';
}
}

关于c++ - 在 C++11 中,如何查找并返回以给定字符串开头的字符串 vector 中的所有项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62688268/

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