2010-07-10 105 views
23

假设我有一个字符串"qwerty",我希望找到其中e字符的索引位置。 (在这种情况下,索引应该是2如何找到C中字符串中的字符索引?

如何在C中执行此操作?

我找到了strchr函数,但它返回一个指向字符而不是索引的指针。

+0

可能重复C](http://stackoverflow.com/questions/4824/string-indexof-function-in-c) – 2015-07-29 13:52:32

回答

47

距离和strchr什么回报减去字符串地址:

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

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

down-voter:代码有什么问题吗? – wj32 2010-07-10 03:00:25

+0

这是“正确的”,但理论上可怕的是,标准中没有任何东西可以阻止一个字符串的长度超过一个普通的'int'的容量。如果您可以依赖于C99,请使用uintptr_t(在stdint.h中定义)。它也应该消除对该演员的需求。 – 2010-07-10 03:43:42

+4

指针差异的结果是ptrdiff_t。 – Nyan 2010-07-10 04:19:16

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. 
} 

此代码是未经测试的当前,但它体现了正确的概念。

4

您也可以使用strcspn(string, "e"),但这可能会慢得多,因为它能够处理多个可能字符的搜索。使用strchr并减去指针是最好的方法。

0

什么:

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

复制到e保留原始的字符串,我想如果你不在乎,你可以只工作在*串

[String.indexOf功能的