String.indexOf-Funktion in C

Lesezeit: 3 Minuten

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 ursprünglichen Zeichenfolge.

Bills Benutzeravatar
Rechnung

strstr gibt einen Zeiger auf das gefundene Zeichen zurück, sodass Sie Zeigerarithmetik verwenden könnten: (Hinweis: Dieser Code wurde nicht auf seine Kompilierungsfähigkeit getestet, er ist nur einen Schritt von 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" */
}

  • Undefiniertes Verhalten, wenn das Zeichen nicht gefunden wird. Auch sollten Sie nicht verwenden strstr (mit oder ohne Tippfehler) if strchr würde genügen.

    – R.. GitHub HÖR AUF, EIS ZU HELFEN

    24. Oktober 2010 um 4:51 Uhr

  • @R .. – Ich habe den Tippfehler behoben und dem Pseudocode eine Fehlerprüfung hinzugefügt. Ebenfalls, strchr funktioniert nicht, um Sequenzen mit mehreren Zeichen zu finden, oder?

    – Rechnung

    24. Oktober 2010 um 23:35 Uhr


  • In der Tat, aber OP hat nach einem Zeichen gefragt, nicht nach einer Teilzeichenfolge. Natürlich, wenn Sie Zeichen weit interpretieren, um Multibyte-Zeichen einzuschließen, strstr ist die richtige Funktion zu verwenden.

    – R.. GitHub HÖR AUF, EIS ZU HELFEN

    25. Oktober 2010 um 0:33 Uhr

  • @R .. – Da das OP über ein Zeichen wie im Text sprach, nicht wie im char Speichernamen habe ich eine Lösung angegeben, die die Hoffnung hat, für ein Zeichen wie 輪 zu funktionieren. Sie widersprechen?

    – Rechnung

    25. Oktober 2010 um 3:30 Uhr


ich denke, dass

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

ist was du willst. Hier ist ein Beispiel, aus dem gezogen wurde 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;
}

  • strcspn ist eher so String.IndexOfAny() – Suche nach einem der Zeichen in der keys Reihe. Aber ja, es wird den Trick tun

    – Isak Savo

    19. März 2010 um 6:25 Uhr

  • Der obige Kommentar ist sehr wichtig – wenn Sie es wie im Beispiel tun, wird indexOf () NICHT nachgeahmt, sodass die ursprüngliche Antwort ziemlich falsch ist.

    – GreenieMeanie

    15. November 2011 um 16:59 Uhr

  • Das ist genau das, wonach Sie suchen: stackoverflow.com/a/1479401/3395760

    – Alessandro Muzzi

    14. Juni 2016 um 23:08 Uhr


Benutzeravatar von Michal Sznajder
Michal Sznajder

EDIT: 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 kein String 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

  • Ich bin mir nicht sicher, was Sie mit “reinem C” meinen, aber strchr() und string.h sind seit 20 Jahren Teil von Standard C.

    – Robert Gamble

    17. Oktober 2008 um 4:34 Uhr

Benutzeravatar von fnisi
fnisi

Schreibe dein Eigenes 🙂

Code aus einer BSD-lizenzierten String-Verarbeitungsbibliothek für C, aufgerufen 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;
}

  • Ich bin mir nicht sicher, was Sie mit “reinem C” meinen, aber strchr() und string.h sind seit 20 Jahren Teil von Standard C.

    – Robert Gamble

    17. Oktober 2008 um 4:34 Uhr

Benutzeravatar von klutt
klutt

Du kannst schreiben

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

um den Index zu finden 'h' in der gegebenen Verstümmelung.

  • strstr könnte zurückkehren NULL wenn Zeichenfolge nicht gefunden wurde.

    – StaceyGirl

    15. Januar 2018 um 14:38 Uhr

1405090cookie-checkString.indexOf-Funktion in C

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy