如何在C中找到字符串中字符的索引?

bod*_*ydo 36 c indexing strchr

假设我有一个字符串"qwerty",我希望在其中找到e字符的索引位置.(在这种情况下,索引将是2)

我怎么用C做?

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

wj3*_*j32 69

只需从strchr返回的内容中减去字符串地址:

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

e = strchr(string, 'e');
index = (int)(e - string);
Run Code Online (Sandbox Code Playgroud)

请注意,结果为零,因此在上面的示例中它将为2.

  • 是的,这是真的.但是我认为至少对于一个初学者的例子来说int会更清楚,我确信OP不处理5 GB字符串. (7认同)
  • 指针差异的结果是ptrdiff_t. (4认同)
  • `size_t`可能是最明显的一个,因为它足以容纳任何对象的长度(因而也就是任何字符串).这个代码的*real*问题是你应该有`if(e){} else {}`来处理在字符串中找不到字符时的情况. (4认同)
  • @iLearner:非常有趣的是为什么 strchr 的实现需要 char* 作为第二个参数。你使用什么“C”编译器? (3认同)

R..*_*R.. 7

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


abe*_*nky 5

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.
}
Run Code Online (Sandbox Code Playgroud)

该代码目前未经测试,但它演示了正确的概念。