A parte che già esiste la funzione strstr, una funzione del genere si può implementare facilmente in maniera iterativa, magari spezzando il problema in due pezzi (scansione della stringa, confronto tra la stringa da cercare e la sottostringa alla posizione corrente).
codice:
int parola_chiave(const char * Stringa, const char * DaCercare)
{
size_t lDaCercare=strlen(DaCercare);
for(;*Stringa;Stringa++)
{
if(!strncmp(Stringa, DaCercare, lDaCercare))
return 1;
}
return 0;
}
Se strncmp viene espansa in linea non dovrebbero esserci penalizzazioni di performance rispetto allo scandire la stringa alla ricerca del primo carattere e solo quando lo si trova richiamare strncmp.
Per inciso: se vuoi fare tutto te anche strlen e strncmp sono di facile realizzazione:
codice:
size_t strlen(const char * Str)
{
size_t ret;
for(ret=0; *Str; Str++, ret++)
;
return ret;
}
int strncmp(const char * Str1, const char * Str2, size_t Limit)
{
for(;*Str1==*Str2 && Limit; Str1++, Str2++, Limit--)
;
return ((int)*Str1)-((int)*Str2);
}
(nota: non ho provato nulla, ma dovrebbe essere più o meno giusto)