Ogólnie, są szybsze algorytmy przeszukiwania. Ale jak była jasna sugestia że mają być w pętle, to w zasadzie jest tylko 1 wyjście:
#include <stdio.h>
#include <stdlib.h>
char* stringFind(const char *msg, const char *msubstr) {
/* Nie chcę naruszać przekazanego wskaźnika */
char *str = (char *)msg;
while(*str) {
char *start = str;
char *pattern = (char *)msubstr;
/* Jeśli znaleziono 1 znak wzorca, sprawdź dalszą jego część */
while((*str) && (*pattern) && (*str == *pattern)) {
++str;
++pattern;
}
/* Jeśli znaleziono cały wzorzec, zwróć wskaźnik jego początku */
if(!(*pattern)) {
return start;
}
/* Postęp w pozycji przeszukania */
str = start + 1;
}
/* Sygnalizacja braku dopasowania */
return NULL;
}
int main() {
char msg[] = "In the Rabbit hole";
char substr[] = "the";
/* Wskaźnik na początek napisu */
char * matched = stringFind(msg, substr);
if(matched == NULL) {
fprintf(stderr, "String |%s| not matched in |%s|\n", substr, msg);
return EXIT_FAILURE;
}
printf("Matched string started at: |%s|\n", stringFind(msg, "the"));
return EXIT_SUCCESS;
}