Est-il une fonction en c qui retourne l'indice d'un caractère dans un tableau de char?

Est-il une fonction en c qui retourne l'indice d'un caractère dans un tableau de char?

Par exemple quelque chose comme:

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

int index = findInedexOf( values, find );
17
demandé sur Josh Curren 2009-09-26 00:19:50

6 réponses

strchr renvoie le pointeur à la première occurrence, donc 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
}
46
répondu Jesse Beder 2009-09-25 20:22:05
int index = strchr(values,find)-values;

notez que s'il n'y a pas de find trouvé strchr retourne NULL, donc l'indice sera négatif.

5
répondu Michael Krelin - hacker 2009-09-25 20:23:12

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

size_t index = strcspn(values, "E");
2
répondu John Bode 2009-09-25 20:29:25

Sûr index_of() fonction qui fonctionne même quand 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
répondu Konrad Borowski 2013-12-20 15:36:55

Qu'en strpos?

#include <string.h>

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

notez que strpos s'attend à une chaîne à fin zéro, ce qui signifie que vous devez ajouter un '\0' à la fin. Si vous ne pouvez pas faire cela, il vous reste une boucle manuelle et la recherche.

1
répondu Lasse Vågsæther Karlsen 2009-09-25 20:22:50

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

0
répondu Ed S. 2009-09-25 20:25:54