Есть ли функция, которая ищет массив слов, принимая массив в качестве произвольного параметра, такого как 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;
}
Вы можете создать регулярное выражение, содержащее все слова, которые вы ищете (это (значительно) уменьшит сложность во время выполнения, но затруднит подсчет присутствия отдельных слов).