Подтвердить что ты не робот

Есть ли функция в c, которая вернет индекс char в массив char?

Есть ли в c функция, которая будет возвращать индекс char в массиве char?

Например что-то вроде:

char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';

int index = findIndexOf( values, find );
4b9b3361

Ответ 1

strchr возвращает указатель на первое вхождение, поэтому, чтобы найти индекс, просто возьмите смещение со стартовым указателем. Например:

char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';

const char *ptr = strchr(values, find);
if(ptr) {
   int index = ptr - values;
   // do something
}

Ответ 3

int index = strchr(values,find)-values;

Обратите внимание, что если там нет find, то strchr возвращает NULL, поэтому индекс будет отрицательным.

Ответ 4

Там также size_t strcspn(const char *str, const char *set); он возвращает индекс первого появления символа в s, который включен в set:

size_t index = strcspn(values, "E");

Ответ 5

Безопасная функция index_of(), которая работает даже тогда, когда она ничего не находит (возвращает -1 в таком случае).

#include <stddef.h>
#include <string.h>
ptrdiff_t index_of(const char *string, char search) {
    const char *moved_string = strchr(string, search);
    /* If not null, return the difference. */
    if (moved_string) {
        return moved_string - string;
    }
    /* Character not found. */
    return -1;
}

Ответ 6

Как насчет strpos?

#include <string.h>

int index;
...
index = strpos(values, find);

Обратите внимание, что strpos ожидает строку с нулевым завершением, что означает, что вы должны добавить '\ 0' в конце. Если вы не можете этого сделать, у вас останется ручная петля и поиск.

Ответ 7

Вы можете использовать strchr, чтобы получить указатель на первое вхождение и вычесть, что (если не null) из оригинала char *, чтобы получить позицию.