Pregunta

¿Existe 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 la cadena original.

¿Fue útil?

Solución

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 <stdio.h>
#include <string.h>

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;
}

Otros consejos

strstr devuelve un puntero al carácter encontrado, por lo que puedes usar la aritmética de punteros:(Nota:Este código no ha sido probado en cuanto a su capacidad de compilació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 carácter.La aritmética de punteros dice "¡Hola!":

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 quieras.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á totalmente atado a C puro y puede usar string.h, existe strchr()Mira aquí

Escribe lo tuyo :)

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

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 la confusión dada.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top