检查字符串是否包含vector <string>值的有效方法?

时间:2016-07-08 12:16:19

标签: c++ string

我对C ++编程很陌生,但出于某些原因,我需要用C ++开发一个小工具。我已经在C#中编写了相同的工具。现在我正在尝试检查我的字符串是否包含存储在std :: vector中的值。在C#中,这很简单,只需使用类似的东西:

if(string.Contains(myarray)) { // do sth. }

在C ++中,这似乎更难实现。我google了很多,但到目前为止,我发现只有解决方案来检查数组中是否存在WHOLE字符串,而不仅仅是它的某个部分。

4 个答案:

答案 0 :(得分:3)

不幸的是std::string没有一个方法可以看出一个向量的元素是否在C#中的字符串中。它的作用是std::string::find,它可以确定字符串是否包含在您调用find的字符串中。您可以使用

std::vector<std::string> words;
// fill words
std::string search_me = "some text";
for (const auto & e : words)
{
    if (search_me.find(e) != std::string::npos)
    {
        // e is contained in search me.  do something here
        // call break here if you only want to check for one existence
    }
}

这是O(N * complexity_of_find)。

答案 1 :(得分:0)

使用for循环和find方法。

答案 2 :(得分:0)

我建议std::find_first_of

不确定我是否理解你的确切问题。你能举一个小例子来说明你想要找到什么吗?

答案 3 :(得分:0)

如果您需要更有效的方法来查找字符串中的多个子字符串而不是直接查找逐字符串,则可以使用Aho-Corasick algorithm 它使用trie来保存子串。 First google link to c++ implementation