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.
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.