46

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

我如何在 C 中做到这一点?

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

4

5 回答 5

95

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

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

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

请注意,结果是基于零的,因此在上面的示例中它将是 2。

于 2010-07-10T02:56:48.557 回答
8

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

于 2010-07-10T03:36:55.763 回答
4
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.
}

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

于 2010-07-10T02:57:10.740 回答
2

这应该这样做:

//Returns the index of the first occurence of char c in char* string. If not found -1 is returned.
int get_index(char* string, char c) {
    char *e = strchr(string, c);
    if (e == NULL) {
        return -1;
    }
    return (int)(e - string);
}
于 2019-03-11T05:45:39.743 回答
1

关于什么:

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

复制到 e 以保留原始字符串,我想如果您不在乎,您可以对 *string 进行操作

于 2016-07-07T21:32:12.297 回答