Есть ли функция, которая ищет массив слов, принимая массив в качестве произвольного параметра, такого как boost::regex_search, в библиотеке boost?

Мне нужно реализовать механизм поиска по списку слов и дать результат, если слово найдено не в предоставленном тексте.

Я реализовал это с помощью boost библиотека. И это следующим образом,

int main(int argc, char**argv)
{
   int count = argc - 2;
   std::string text = argv[1];
   for(int i = 2; i < argc; i++)
   {
      boost::regex re(argv[i], boost::regex::icase);
      if(boost::regex_search(text, re))
      {
          std::cout<<re<<" Found in "<<text<<std::endl;
          count--;
      }
      else std::cout<<re<<" Not Found in " <<text<<std::endl;
   }
   if(count == 0)
   {
      std::cout <<"ALL WORDS ARE FOUND"<<std::endl;
   }
   else std::cout << "SOME WORDS ARE NOT FOUND"<<std::endl;
}

Это работает нормально для аргументов командной строки.

Теперь мне нужно предоставить массив слов непосредственно boost search Метод (если таковой имеется) в качестве параметра, который должен возвращать, все ли слова найдены.

Я гуглил для этого, но бесполезно.

1 ответ

Решение

Либо просто используйте массив:

 std::vector<std::string> arr { "many", "words", "in", "array" };
 int count = arr.size();

 std::string text = argv[1];
 for(std::string const& word : arr)
 {
    boost::regex re(text, boost::regex::icase);
    if(boost::regex_search(text, re))
    {
        std::cout<<re<<" Found in "<<text<<std::endl;
        count--;
    }
    else std::cout<<re<<" Not Found in " <<text<<std::endl;
 }

Вы можете создать регулярное выражение, содержащее все слова, которые вы ищете (это (значительно) уменьшит сложность во время выполнения, но затруднит подсчет присутствия отдельных слов).

Другие вопросы по тегам