web-dev-qa-db-fra.com

Existe-t-il une fonction dans c qui renvoie l'index d'un caractère dans un tableau de caractères?

Existe-t-il une fonction dans c qui renvoie l'index d'un caractère dans un tableau de caractères?

Par exemple, quelque chose comme:

char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';

int index = findInedexOf( values, find );
17
Josh Curren

strchr renvoie le pointeur sur la première occurrence. Ainsi, pour trouver l'index, il suffit de prendre l'offset avec le pointeur de départ. Par exemple:

char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';

const char *ptr = strchr(values, find);
if(ptr) {
   int index = ptr - values;
   // do something
}
47
Jesse Beder
int index = strchr(values,find)-values;

Notez que s'il n'y a pas find trouvé, alors strchr retourne NULL, donc index sera négatif.

5

Il y a aussi size_t strcspn(const char *str, const char *set); elle retourne l'index de la première occurrence du caractère dans s qui est inclus dans set:

size_t index = strcspn(values, "E");
2
John Bode

Fonction index_of() qui fonctionne même s’il ne trouve rien (retourne -1 dans ce cas).

#include <stddef.h>
#include <string.h>
ptrdiff_t index_of(const char *string, char search) {
    const char *moved_string = strchr(string, search);
    /* If not null, return the difference. */
    if (moved_string) {
        return moved_string - string;
    }
    /* Character not found. */
    return -1;
}
2
Konrad Borowski

Qu'en est-il des strpos?

#include <string.h>

int index;
...
index = strpos(values, find);

Notez que strpos attend une chaîne terminée par zéro, ce qui signifie que vous devez ajouter un "\ 0" à la fin. Si vous ne pouvez pas faire cela, vous vous retrouvez avec une boucle manuelle et une recherche.

Vous pouvez utiliser strchr pour obtenir un pointeur sur la première occurrence et le soustraire (si non nul) du caractère original * pour obtenir la position.

0
Ed S.