web-dev-qa-db-fra.com

Comment trouver l'index d'un caractère dans une chaîne en C?

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

Comment puis-je le faire en C? 

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

30
bodacydo

Soustrayez simplement l'adresse de chaîne de ce que strchr renvoie:

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

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

Notez que le résultat est basé sur zéro, donc dans l'exemple ci-dessus, il sera 2.

59
wj32

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. Utiliser strchr et soustraire le pointeur est la meilleure solution.

6
R..
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 n'a pas encore été testé, mais il illustre le concept approprié.

3
abelenky

Qu'en est-il de:

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

copier vers e pour conserver la chaîne d'origine, je suppose que si vous vous en fichez, vous pouvez simplement opérer sur * chaîne

0
Dan Molik