2010-07-10 7 views
23

Supposons que j'ai une chaîne "qwerty" et que je souhaite trouver la position d'index du caractère e dedans. (Dans ce cas, l'index serait 2)Comment trouver l'index d'un caractère dans une chaîne en C?

Comment faire en C?

J'ai trouvé la fonction strchr mais elle renvoie un pointeur sur un caractère et non sur l'index.

+0

double possible de [fonction String.indexOf dans C] (http://stackoverflow.com/questions/4824/string-indexof-function-in-c) –

Répondre

47

soustrayez juste l'adresse de la chaîne de ce qui revient strchr:

char *string = "qwerty"; 
char *e; 
int index; 

e = strchr(string, 'e'); 
index = (int)(e - string); 
+0

down-voter: Y at-il un problème avec le code? – wj32

+0

Ceci est "juste" mais théoriquement effrayant car il n'y a rien dans le standard qui arrête la longueur d'une chaîne dépassant largement la capacité d'un 'int' ordinaire. Si vous pouvez compter sur C99, utilisez uintptr_t (défini dans stdint.h) pour cela. Il devrait également éliminer le besoin de cette distribution. –

+4

Le résultat de la différence de pointeur est ptrdiff_t. – Nyan

3
void myFunc(char* str, char c) 
{ 
    char* ptr; 
    int index; 

    ptr = strchr(str, c); 
    if (ptr == NULL) 
    { 
     printf("Character not found\n"); 
     return; 
    } 

    index = ptr - str; 

    printf("The index is %d\n", index); 
    ASSERT(str[index] == c); // Verify that the character at index is the one we want. 
} 

Ce code est actuellement non testé, mais il démontre le concept approprié.

4

Vous pouvez également utiliser strcspn(string, "e") mais cela peut être beaucoup plus lent car il est capable de gérer la recherche de plusieurs caractères possibles. En utilisant strchr et en soustrayant le pointeur est le meilleur moyen.

0

Qu'en est-:

char *string = "qwerty"; 
char *e = string; 
int idx = 0; 
while (*e++ != 'e') idx++; 

copie à e pour préserver la chaîne d'origine, je suppose que si vous ne vous pourriez souciez pas seulement fonctionner sur * chaîne

Questions connexes