1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| char *c_strstr (const char *s1, const char *s2)
{
const char *ps1;
const char *ps2;
//1- si s2 est vide, retourner s1 (C'est la norme!)
if(*s2 == 0) return s1;
// Pour l'analyse de la chaine, on va simultanément parcourir les deux chaines
// à partir de s1 et s2 :
//2- Tant que s1 n'est pas à la fin de la chaine :
while(*s1 !=0)
{
// 2-1- initialiser un pointeur sp1 avec s1
ps1 = s1;
// 2-2- initialiser un pointeur sp2 avec s2
ps2 = s2;
// 2-3- Tant que le caractère pointé par sp1 est égal au caractère pointé par sp2
// et que l'on est pas arrivé à la fin de l'une des deux chaines :
// incrémenter sp1 et sp2
while(*ps1== *ps2 && *ps1 !=0 && *ps2 != 0)
{
ps1++;
ps2++;
}
// 2-4- Si le caractère pointé par sp2 est alors le caractère de fin de chaine,
// la sous-chaine a été trouvée : retourner s1
if(*ps2==0) return s1;
// 2-5- Sinon, analyser la chaine à partir du caractère suivant : incrémenter s1
s1++;
}
// 3- La sous chaine n'a pas été trouvée : retourner NULL
return NULL;
} |