Pergunta

Existe uma função de biblioteca C que retornará o índice de um caractere em uma string?

Até agora, tudo que encontrei são funções como strstr que retornarão o char * encontrado, e não sua localização na string original.

Foi útil?

Solução

eu penso isso

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

é o que você quer.Aqui está um exemplo retirado de aqui:

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

Outras dicas

strstr retorna um ponteiro para o caractere encontrado, então você pode usar aritmética de ponteiro:(Observação:este código não foi testado quanto à sua capacidade de compilação, está a um passo do 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 é melhor apenas para um caractere.A aritmética do ponteiro diz "Olá!":

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

Importante: strchr() retorna NULL se nenhuma string for encontrada

Você pode usar strstr para realizar o que deseja.Exemplo:

char *a = "Hello World!";
char *b = strstr(a, "World");

int position = b - a;

printf("the offset is %i\n", position);

Isso produz o resultado:

the offset is 6

Se você não está totalmente vinculado ao C puro e pode usar string.h existe strchr()Veja aqui

Escreva o seu próprio :)

Código de uma biblioteca de processamento de strings licenciada pelo BSD para C, chamada 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;
}

Você pode escrever

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

para encontrar o índice de 'h' no dado ilegível.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top