Как мне найти индекс символа в строке в C? - PullRequest
32 голосов
/ 10 июля 2010

Предположим, у меня есть строка "qwerty", и я хочу найти в ней индексную позицию символа e.(В этом случае индекс будет 2)

Как мне это сделать в C?

Я нашел функцию strchr, но она возвращает указатель на символ, а не индекс.

Ответы [ 5 ]

64 голосов
/ 10 июля 2010

Просто вычтите строковый адрес из того, что возвращает strchr:

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

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

Обратите внимание, что результат равен нулю, поэтому в приведенном выше примере он будет равен 2.

7 голосов
/ 10 июля 2010

Вы также можете использовать strcspn(string, "e"), но это может быть намного медленнее, поскольку он может обрабатывать поиск нескольких возможных символов. Лучше всего использовать strchr и вычитать указатель.

3 голосов
/ 10 июля 2010
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.
}

Этот код в настоящее время не проверен, но демонстрирует правильную концепцию.

0 голосов
/ 11 марта 2019

Это должно сделать это:

//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);
}
0 голосов
/ 08 июля 2016

А как же:

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

копирование в e для сохранения исходной строки, я думаю, если вам все равно, вы можете просто оперировать * string

...