2010-07-10 19 views
23

Bir dize var "qwerty" ve ben e karakterinin dizin konumunu bulmak istiyorum. (Bu durumda, dizin 2 olur)Bir karakter dizisini C cinsinden nasıl bulurum?

Nasıl yapabilirim C?

strchr işlevini buldum ancak dizine değil, bir karaktere bir işaretçi döndürüyor.

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

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

olası yinelenen C] (http://stackoverflow.com/questions/4824/string-indexof-function-in-c) –

cevap

47

Sadece ne strchr getiri dize adresini çıkarma.

+0

Aşağı seçmen: Kodda bir sorun var mı? – wj32

+0

Bu, "doğru" ancak teorik olarak korkutucu bir şekilde, standartta bir dizgenin uzunluğunu, düz bir 'int' kapasitesini büyük ölçüde aşacak şekilde durduran hiçbir şey yoktur. C99'a güvenebiliyorsanız, bunun için uintptr_t (stdint.h dosyasında tanımlanmış) kullanın. Aynı zamanda bu oyuncuya olan ihtiyacı da ortadan kaldırmalıdır. –

+4

İşaretçi farkının sonucu 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. 
} 

Bu kod şu anda denenmemiş, ama doğru kavramı gösterir:

4

Ayrıca strcspn(string, "e")'u da kullanabilirsiniz, ancak bu çok olası karakterler için arama yapabildiğinden çok daha yavaş olabilir. strchr kullanarak ve işaretçiyi çıkararak en iyi yoldur.

0

Ne hakkında: Eğer sadece dize * üzerinde çalışabilir umursamazsak

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

kopyalama orijinal dize korumak için e herhalde

[String.indexOf işlevinde arasında