Обратите внимание, что если там нет 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 *, чтобы получить позицию.