Bonjour,
Est-ce qu'il existe une fonction "strpos" ou équivalente dans la libc (ou glibc, peu importe) standard ?
C'est pas qu'elle soit difficile à écrire mais je suis un peu surpris de ne pas la retrouver : ai-je mal cherché ?
Bonjour,
Est-ce qu'il existe une fonction "strpos" ou équivalente dans la libc (ou glibc, peu importe) standard ?
C'est pas qu'elle soit difficile à écrire mais je suis un peu surpris de ne pas la retrouver : ai-je mal cherché ?
Non, au boulot![]()
"La haine seule fait des choix" - Koan Zen
"Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
"Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
Faites du Prolog, ça vous changera les idées !
Ma page Prolog
Mes codes sources commentés
Mon avatar : La Madeleine à la veilleuse de Georges de La Tour
Euh, elle est sensée faire quoi cette fonction strpos ?
Si c'est comme en PHP, elle retourne la position d'un caractère dans une chaine.
Je pense qu'on peut bidouiller un peu et faire un truc dans ce genre :
Nas'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 int strpos(char *chaine, char ch) { char *res = strchr(chaine, ch); if(res == NULL) { return -1 ; } return (int)(res-chaine) ; }
merci,
moi j'avais finalement fabriqué ça :
Je crois que côté optimalité ça devrait être à kif kif non ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int strpos(const char * str, char c) { int i = 0; while ((str[i] != '\0') && (str[i] != c)) i++; return (str[i] == '\0') ? -1 : i; }
corrigé après la remarque de drealock, merci
À mon avis, strchr est pas mal, mais nécessite de changer ton algo car il retourne un pointeur (et NULL si rien n'est trouvé). Tu peux l'utiliser comme le fait Nasky.
Le code de Nasky doit marcher, par contre pas le tient sympho si le caractere se trouve en dernière position il te renvoie -1: sort le i++ du test et retourne i (au lieu de i-1):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 while ((str[i] != '\0') && (str[i] != c)) i++; return (str[i] == '\0') ? -1 : i; }
Partager