Gibt es eine Funktion in c, die den Index eines Zeichens in einem Zeichenarray zurückgibt?
Zum Beispiel so etwas wie:
char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';
int index = findIndexOf( values, find );
Josh Curren
Gibt es eine Funktion in c, die den Index eines Zeichens in einem Zeichenarray zurückgibt?
Zum Beispiel so etwas wie:
char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';
int index = findIndexOf( values, find );
strchr
gibt den Zeiger auf das erste Vorkommen zurück, um also den Index zu finden, nehmen Sie einfach den Offset mit dem Startzeiger. Zum Beispiel:
char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';
const char *ptr = strchr(values, find);
if(ptr) {
int index = ptr - values;
// do something
}
meine frage, wie finde ich Indizes in einem Zeichen. Wenn ich 2 hätte E
s in der Zeichenfolge?
– Turmuka
16. Oktober 2017 um 23:07 Uhr
Du hast mir nicht gesagt, was ich tun soll #include
– Strg-Alt-Entf
28. Februar 2020 um 23:39 Uhr
@turmuka dann wird nur das erste Vorkommen zurückgegeben
– Ratul Hasan
9. Oktober 2020 um 12:17 Uhr
Es gibt auch size_t strcspn(const char *str, const char *set)
; es gibt den Index des ersten Vorkommens des Zeichens in zurück s
das gehört dazu set
:
size_t index = strcspn(values, "E");
int index = strchr(values,find)-values;
Beachten Sie, dass, wenn es keine gibt find
dann gefunden strchr
kehrt zurück NULL
also wird der Index negativ sein.
Zeigerarithmetik ein NULL
ist undefiniertes Verhalten. Es muss keinen bestimmten Wert zurückgeben.
– Konrad Borowski
20. Dezember 2013 um 8:20 Uhr
Stimmt, muss nicht, tut es aber meistens :). Mein Punkt war, dass man hier einen NULL-Zeiger erwarten sollte.
– Michael Krelin – Hacker
20. Dezember 2013 um 14:05 Uhr
Nur weil es bei Ihnen zu funktionieren scheint, heißt das noch lange nicht, dass es richtig ist. Ihr Code kann zufällig fehlschlagen, wenn der Zeiger hoch genug ist (ich habe das tatsächlich überprüft, siehe gist.github.com/GlitchMr/8056175 (sollte eine Endlosschleife sein, wenn dies korrekt funktionieren würde)).
– Konrad Borowski
20. Dezember 2013 um 15:21 Uhr
Ich habe nicht gesagt, dass es richtig ist. Und ja, das ist sehr richtig, worauf Sie hinweisen, aber nur weil das Verhalten de facto definiert ist, können Sie das tun;)
– Michael Krelin – Hacker
20. Dezember 2013 um 18:48 Uhr
Sicher index_of()
Funktion, die auch dann funktioniert, wenn sie nichts findet (returns -1
in diesem Fall).
#include <stddef.h>
#include <string.h>
ptrdiff_t index_of(const char *string, char search) {
const char *moved_string = strchr(string, search);
/* If not null, return the difference. */
if (moved_string) {
return moved_string - string;
}
/* Character not found. */
return -1;
}
Was ist mit Strpos?
#include <string.h>
int index;
...
index = strpos(values, find);
Beachten Sie, dass strpos eine nullterminierte Zeichenfolge erwartet, was bedeutet, dass Sie am Ende ein ‘\0’ hinzufügen sollten. Wenn Sie das nicht können, bleibt Ihnen eine manuelle Schleife und Suche.
Ich glaube nicht, dass das in der C-Standardbibliothek existiert, obwohl ich mich irren könnte.
– Ed S.
25. September 2009 um 20:27 Uhr
Persönlich habe ich mehr Vertrauen in die strchr-Antworten, ich möchte wirklich, dass stattdessen eine davon als Antwort markiert wird. Ich habe nur ein wirklich altes Stück Quellcode gefunden, das diese Funktion verwendet, und ich weiß nicht, wie Standard es ist, wenn ich es betrachte.
– Lasse V. Karlsen
25. September 2009 um 20:29 Uhr
strpos() ist keine Standardfunktion in C (oder sogar C++). Ziemlich üblich in PHP usw. …
– Jesus
25. September 2009 um 20:29 Uhr
Seltsam, aber ich habe ein Stück C-Code, der es verwendet. Aber wie gesagt, ich weiß nicht, wie Standard es ist.
– Lasse V. Karlsen
25. September 2009 um 20:30 Uhr
strpos ist nicht Teil der C std lib – aber es ist wahrscheinlich auf den meisten Systemen vorhanden.
– Martin Beckett
25. September 2009 um 20:30 Uhr
Mondasteroid
Sie können verwenden strcspn() um den Index eines Zeichens in einer Zeichenfolge zu erhalten, oder verwenden Sie meine miese Implementierung:
// Returns the index of the first occurrence of a char
int string_indexof(char ch, char *everything) {
int everythingLength = strlen(everything);
for (int i = 0; i < everythingLength; i++) {
if (ch == everything[i]) {
return i;
}
}
return -1;
}
Ich glaube nicht, dass das in der C-Standardbibliothek existiert, obwohl ich mich irren könnte.
– Ed S.
25. September 2009 um 20:27 Uhr
Persönlich habe ich mehr Vertrauen in die strchr-Antworten, ich möchte wirklich, dass stattdessen eine davon als Antwort markiert wird. Ich habe nur ein wirklich altes Stück Quellcode gefunden, das diese Funktion verwendet, und ich weiß nicht, wie Standard es ist, wenn ich es betrachte.
– Lasse V. Karlsen
25. September 2009 um 20:29 Uhr
strpos() ist keine Standardfunktion in C (oder sogar C++). Ziemlich üblich in PHP usw. …
– Jesus
25. September 2009 um 20:29 Uhr
Seltsam, aber ich habe ein Stück C-Code, der es verwendet. Aber wie gesagt, ich weiß nicht, wie Standard es ist.
– Lasse V. Karlsen
25. September 2009 um 20:30 Uhr
strpos ist nicht Teil der C std lib – aber es ist wahrscheinlich auf den meisten Systemen vorhanden.
– Martin Beckett
25. September 2009 um 20:30 Uhr
Ed S.
Sie können verwenden strchr um einen Zeiger auf das erste Vorkommen zu erhalten und das (wenn nicht null) vom ursprünglichen char* zu subtrahieren, um die Position zu erhalten.
strchr()
– Chaos
25. September 2009 um 20:21 Uhr
mögliches Duplikat der String.indexOf-Funktion in C
– Ciro Santilli OurBigBook.com
29. Juli 2015 um 13:52 Uhr