C++ 查找字符串是否包含字符串向量的任何一个元素的最佳方法

C++ 查找字符串是否包含字符串向量的任何一个元素的最佳方法,c++,string,algorithm,search,C++,String,Algorithm,Search,我有一个目标字符串和一个字符串向量。我想检查向量中的任何字符串是否包含在我的目标字符串中,并执行一些操作。否则,就不要做别人 这样做的最佳方式是什么。我知道我可以使用for循环和string::find。但是如果stl中有任何其他函数可以做到这一点?还是使用lambda函数 我尝试了循环,它肯定会工作 std::string target = "United States"; std::vector<std::string> stringVec = {"United","Amer

我有一个目标字符串和一个字符串向量。我想检查向量中的任何字符串是否包含在我的目标字符串中,并执行一些操作。否则,就不要做别人

这样做的最佳方式是什么。我知道我可以使用for循环和string::find。但是如果stl中有任何其他函数可以做到这一点?还是使用lambda函数

我尝试了循环,它肯定会工作

std::string target = "United States"; 

std::vector<std::string> stringVec = {"United","America","Kindom"};

For (auto it = stringVec.cbegin(); it!=stringVec.cend(); ++it)
{

    if (target.find(*it)!=std::string::npos)
        cout << "Contains";
    else
        cout << "Not existed";
}
std::string target=“美国”;
向量stringVec={“联合”、“美国”、“金多姆”};
对于(auto it=stringVec.cbegin();it!=stringVec.cend();++it)
{
if(target.find(*it)!=std::string::npos)
cout将完成这项工作

std::string target = "United States"; 
std::vector<std::string> stringVec = {"United","America","Kindom"};
bool found = std::any_of(stringVec.begin(), stringVec.end(), 
                         [&target](const auto& s){ return target.find(s) != std::string::npos; });
if(found) 
    std::cout << "Contains";
else
    cout << "Not existed";
std::string target=“美国”;
向量stringVec={“联合”、“美国”、“金多姆”};
bool found=std::(stringVec.begin()、stringVec.end()中的任意一个),
[&target](const auto&s){return target.find(s)!=std::string::npos;});
如果(找到)

STD::P>从C++代码的细节中抽象出一点,你所描述的问题被称为多字符串搜索问题。在这个问题中,你得到了一组模式字符串P1、P2、…、Pk和文本字符串T,目标是确定哪些子串出现在模式串中。这是一个研究得很好的问题。这里有一些很棒的算法

如果您有一组固定的模式,并且将搜索许多不同的字符串以找到这些模式,那么是一个很好的解决方案。它对模式字符串进行少量(线性)预处理,以构建一个匹配器,然后可以在可变文本中快速找到这些字符串的所有匹配项(在时间长度上线性搜索字符串加上匹配数)。该算法有多种C++实现; 另一方面,如果您有一个固定的字符串和一组可变的模式,您可能希望查看or,在对要搜索的字符串进行线性预处理后,or支持对该字符串进行高效(线性或接近线性)搜索,以查找您想要的任何模式


这些算法的缺点是有点复杂,除非你真的需要效率,否则你不会编写这些算法。例如,如果你在处理数百万个字符长的字符串,那么这些方法可能就是你想要的。因此,从这个意义上说,如果你在搜索短字符串,你可能会得到一个只需使用您现有的代码,因为它不太可能成为瓶颈,而且相当容易理解。

您可以使用带有lambda的
std::for_each
,但这将为您提供相同的代码。