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é ?
Version imprimable
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 :wink:
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:
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:
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:
1
2
3
4 while ((str[i] != '\0') && (str[i] != c)) i++; return (str[i] == '\0') ? -1 : i; }