2010-07-10 8 views
23

Angenommen, ich habe eine Zeichenfolge "qwerty" und ich möchte die Indexposition des e Zeichen darin finden. (In diesem Fall wäre der Index 2)Wie finde ich den Index eines Zeichens innerhalb einer Zeichenkette in C?

Wie mache ich es in C?

Ich fand die strchr Funktion, aber es gibt einen Zeiger auf ein Zeichen und nicht den Index zurück.

+0

möglich Duplikat [String.indexOf Funktion in C] (http://stackoverflow.com/questions/4824/string-indexof-function-in-c) –

Antwort

47

subtrahieren Sie einfach die Zeichenfolge Adresse von dem, was strchr kehrt:

char *string = "qwerty"; 
char *e; 
int index; 

e = strchr(string, 'e'); 
index = (int)(e - string); 
+0

down-voter: Gibt es etwas falsch mit dem Code? – wj32

+0

Dies ist "richtig", aber theoretisch beängstigend, da es nichts im Standard gibt, das die Länge einer Saite davon abhält, die Kapazität eines einfachen 'int' weit zu überschreiten. Wenn Sie sich auf C99 verlassen können, verwenden Sie dafür uintptr_t (definiert in stdint.h). Es sollte auch die Notwendigkeit für diese Besetzung beseitigen. –

+4

Ergebnis der Zeigerdifferenz ist ptrdiff_t. – Nyan

3
void myFunc(char* str, char c) 
{ 
    char* ptr; 
    int index; 

    ptr = strchr(str, c); 
    if (ptr == NULL) 
    { 
     printf("Character not found\n"); 
     return; 
    } 

    index = ptr - str; 

    printf("The index is %d\n", index); 
    ASSERT(str[index] == c); // Verify that the character at index is the one we want. 
} 

Dieser Code derzeit nicht getestet, aber es zeigt das richtige Konzept.

4

Sie können auch strcspn(string, "e") verwenden, aber das kann viel langsamer sein, da es in der Lage ist, nach mehreren möglichen Zeichen zu suchen. Verwenden Sie strchr und Subtrahieren des Zeigers ist der beste Weg.

0

Was:

char *string = "qwerty"; 
char *e = string; 
int idx = 0; 
while (*e++ != 'e') idx++; 

Kopieren e die ursprüngliche Zeichenfolge zu erhalten, nehme ich an, wenn Sie es Ihnen egal könnte nur * string arbeiten über