2010-07-10 8 views
23

Supongamos que tengo una cadena "qwerty" y deseo encontrar la posición de índice del carácter e en ella. (En este caso, el índice sería 2)¿Cómo puedo encontrar el índice de un personaje dentro de una cadena en C?

¿Cómo lo hago en C?

Encontré la función strchr pero devuelve un puntero a un carácter y no al índice.

+0

posible duplicado de [String.indexOf función de C] (http://stackoverflow.com/questions/4824/string-indexof-function-in-c) –

Respuesta

47

Sólo resta la dirección de la cadena de lo que vuelve strchr:

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

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

down-voter: ¿Hay algún problema con el código? – wj32

+0

Esto es "correcto" pero teóricamente aterrador en el sentido de que no hay nada en la norma que detenga la longitud de una cadena que exceda ampliamente la capacidad de una "int" simple. Si puede confiar en C99, use uintptr_t (definido en stdint.h) para esto. También debería eliminar la necesidad de ese elenco. –

+4

El resultado de la diferencia del puntero es 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. 
} 

Este código se encuentra actualmente sin probar, pero demuestra el concepto adecuado.

4

También puede usar strcspn(string, "e") pero esto puede ser mucho más lento ya que puede manejar la búsqueda de múltiples caracteres posibles. Usar strchr y restar el puntero es la mejor manera.

0

¿Qué hay de:

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

copia al correo para preservar la cadena original, supongo que si no le importa que sólo podría operar sobre * cadena

Cuestiones relacionadas