Función String.indexOf en C

¿Hay una función de biblioteca C que devolverá el índice de un carácter en una cadena?

Hasta ahora, todo lo que he encontrado son funciones como strstr que devolverán el carácter encontrado *, no su ubicación en el texto original.

Creo que

size_t strcspn (const char * str1, const char * str2);

es lo que quieres Aquí hay un ejemplo extraído de aquí :

/* strcspn example */ #include  #include  int main () { char str[] = "fcba73"; char keys[] = "1234567890"; int i; i = strcspn (str,keys); printf ("The first number in str is at position %d.\n",i+1); return 0; } 

strstr devuelve un puntero al carácter encontrado, por lo que podría usar la aritmética del puntero: (Nota: este código no ha sido probado para su capacidad de comstackción, está a un paso del pseudocódigo).

 char * source = "test string"; /* assume source address is */ /* 0x10 for example */ char * found = strstr( source, "in" ); /* should return 0x18 */ if (found != NULL) /* strstr returns NULL if item not found */ { int index = found - source; /* index is 8 */ /* source[8] gets you "i" */ } 

EDITAR: strchr es mejor solo para un char. Pointer aritmetics dice “Hellow!”:

 char *pos = strchr (myString, '#'); int pos = pos ? pos - myString : -1; 

Importante: strchr () devuelve NULL si no se encuentra ninguna cadena

Puedes usar strstr para lograr lo que quieres. Ejemplo:

 char *a = "Hello World!"; char *b = strstr(a, "World"); int position = b - a; printf("the offset is %i\n", position); 

Esto produce el resultado:

 the offset is 6 

Si no estás totalmente vinculado a C puro y puedes usar string.h, hay strchr (). Mira aquí

Escribe lo tuyo 🙂

Código de una biblioteca de procesamiento de cadenas con licencia BSD para C, llamada zString

https://github.com/fnoyanisi/zString

 int zstring_search_chr(char *token,char s){ if (!token || s=='\0') return 0; for (;*token; token++) if (*token == s) return 1; return 0; } 

Puedes escribir

 s="bvbrburbhlkvp"; int index=strstr(&s,"h")-&s; 

para encontrar el índice de 'h' en el garble dado.