Bonjour à tous,
J'ai créé une petite fonction qui modifie une chaîne de caractères donnée en y supprimant toutes les occurences d'un caractère donné :
Puis j'ai apporté quelques modifications à cette fonction en pensant la rendre un peu plus rapide :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 /* --------------------------------------------------------------------- STRU_delchr1 : modifie s en y supprimant toutes les occurences du caractère todel. --------------------------------------------------------------------- @param s : chaîne à modifier @param todel : caractère à supprimer --------------------------------------------------------------------- @return : nombre de caractères supprimés --------------------------------------------------------------------- */ unsigned int STRU_delchr(char *s, int todel){ register char *p; unsigned int count = 0U; /* Recherche de todel */ while((p = strchr(s, todel)) != NULL){ /* Décalage */ while(*p++ = *(p+1)) ; count++; } return count; }
Effectivement ici la recherche du caractère par strchr se fait depuis la position courante dans la chaîne et non depuis le début...mais après quelques tests je m'aperçois que c'est la première version de la fonction qui est légèrement plus rapide, pourquoi ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 unsigned int STRU_delchr2(char *s, int todel){ register char *p, *pOffset; unsigned int count = 0U; for(p = s; (pOffset = strchr(p, todel)) != NULL; count++){ p = pOffset; while(*pOffset++ = *(pOffset+1)) ; } return count; }
Partager