Vous devez vous connecter pour exécuter votre code.
Recherche Horspool
É 9.8.2 — Implémentez la fonction horspool_search qui recherche la première occurrence d'un mot dans un texte avec l'algorithme de Horspool.
#include <string.h>
#include <limits.h>
char *horspool_search(const char *t, size_t tlen, const char *s, size_t slen) {
if (slen == 0) return (char *)t;
if (slen > tlen) return NULL;
int d[UCHAR_MAX + 1];
for (int i = 0; i <= UCHAR_MAX; i++) d[i] = (int)slen;
for (size_t i = 0; i < slen - 1; i++)
d[(unsigned char)s[i]] = (int)(slen - 1 - i);
size_t k = 0;
while (k + slen <= tlen) {
size_t j = slen - 1;
while (j < slen && t[k + j] == s[j]) j--;
if (j == (size_t)-1) return (char *)(t + k);
k += (size_t)d[(unsigned char)t[k + slen - 1]];
}
return NULL;
}