Я хочу реализовать поиск текста без учета регистра, который поддерживает параллельное тестирование нескольких ключевых слов.Я уже смог достичь этого способом, который мне не кажется эффективным с точки зрения производительности.
Функция "strcasestr" ( Ссылка на справочную страницу Linux ), кажется,хорошо справляться с поиском по одному ключевому слову, но если вы хотите одновременно протестировать несколько ключевых слов - в моем понимании - вы хотите итерировать символы текста (стог сена) только один раз, чтобы найти вхождение ключевых слов (иглы)).
Использование «strcasestr» несколько раз приведет - как я понимаю, - к нескольким итерациям по тексту (стогу сена), что может быть не самым быстрым решением.Пример:
#define _GNU_SOURCE
#include <stdio.h>
#include <string.h>
int main (void) {
// Text to search in
char *str = "This is a test!";
char *result = strcasestr(str, "not_found1");
if (result == NULL) {
result = strcasestr(str, "NOT_FOUND2");
}
if (result == NULL) {
result = strcasestr(str, "TEST!");
}
printf("Result pointer: %s\n", result );
return 0;
}
Есть ли способ получить позицию первого вхождения одного из (без учета регистра) ключевых слов в тексте быстрее, чем я это сделал?
Я был бы признателен, если бы решение было расширяемым, чтобы я мог продолжить цикл по тексту, чтобы найти все позиции вхождений ключевых слов, потому что я работаю над полнотекстовым поиском ссистема рейтинга результатов.Рамки и небольшие подсказки, чтобы направить меня в правильном направлении, также очень приветствуются.