9

是否可以以某种方式将多个字符串传递给 string::find 函数?

例如,要查找一个字符串,我可能会使用这个:

str.find("a string");

我想做的是这样的:

str.find("a string" || "another string" || "yet another string")

并让函数返回三个字符串中任何一个的第一次出现的位置。

感谢您的任何建议。

4

3 回答 3

16

不与std::string::find,但您可以使用std::find_if来自<algorithm>

std::string str("a string");
std::array<std::string, 3> a{"a string", "another string", "yet another string"};
auto it = std::find_if(begin(a), end(a),
                       [&](const std::string& s)
                       {return str.find(s) != std::string::npos; });
if (it != end(a))
{
    std::cout << "found";
}
于 2013-11-13T11:21:20.047 回答
2

这是不可能的,但你可以做的是:

auto is_there(std::string haystack, std::vector<std::string> needles) -> std::string::size_type {

  for(auto needle : needles ){
    auto pos = haystack.find(needle);
    if(pos != std::string::npos){
      return pos;
    }

  }  
  return std::string::npos;
}  
于 2013-11-13T11:23:31.007 回答
1

多次调用find或从要查找的字符串构造正则表达式。C++11 支持<regex>.

于 2013-11-13T11:12:16.357 回答