Frage
Gibt es eine C-Bibliotheksfunktion, die den Index eines Zeichens in einer Zeichenfolge zurückgibt?
Bisher habe ich nur Funktionen wie strstr gefunden, die das gefundene Zeichen * zurückgeben, nicht seine Position in der Originalzeichenfolge.
Lösung
ich denke, dass
size_t strcspn ( const char * str1, const char * str2 );
ist das, was Sie wollen.Hier ist ein Beispiel aus Hier:
/* 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;
}
Andere Tipps
strstr
gibt einen Zeiger auf das gefundene Zeichen zurück, sodass Sie Zeigerarithmetik verwenden können:(Notiz:Dieser Code wurde nicht auf seine Kompilierungsfähigkeit getestet, er ist nur einen Schritt vom Pseudocode entfernt.)
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" */
}
BEARBEITEN:strchr ist nur für ein Zeichen besser.Zeigerarithmetik sagt „Hallo!“:
char *pos = strchr (myString, '#');
int pos = pos ? pos - myString : -1;
Wichtig: strchr() gibt NULL zurück, wenn keine Zeichenfolge gefunden wird
Sie können strstr verwenden, um das zu erreichen, was Sie wollen.Beispiel:
char *a = "Hello World!";
char *b = strstr(a, "World");
int position = b - a;
printf("the offset is %i\n", position);
Dies ergibt das Ergebnis:
the offset is 6
Wenn Sie nicht vollständig an reines C gebunden sind und string.h verwenden können, gibt es strchr()Siehe hier
Schreibe dein Eigenes :)
Code aus einer BSD-lizenzierten String-Verarbeitungsbibliothek für C, genannt 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;
}
Du kannst schreiben
s="bvbrburbhlkvp";
int index=strstr(&s,"h")-&s;
um den Index von zu finden 'h'
in der gegebenen Verstümmelung.