c中是否有一个函数可以返回char数组中char的索引?

时间:2009-09-25 20:19:50

标签: c string function indexing char

c中是否有一个函数会返回char数组中char的索引?

例如:

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

int index = findIndexOf( values, find );

7 个答案:

答案 0 :(得分:49)

strchr返回指向第一个匹配项的指针,因此要查找索引,只需使用起始指针获取偏移量。例如:

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

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

答案 1 :(得分:5)

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

请注意,如果找不到find,则strchr会返回NULL,因此索引将为负数。

答案 2 :(得分:4)

还有size_t strcspn(const char *str, const char *set);它返回s中包含的set中字符第一次出现的索引:

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

答案 3 :(得分:2)

安全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;
}

答案 4 :(得分:1)

strpos怎么样?

#include <string.h>

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

请注意,strpos需要一个以零结尾的字符串,这意味着您应该在末尾添加一个'\ 0'。如果你不能这样做,你就会留下手动循环并进行搜索。

答案 5 :(得分:1)

您可以使用 strcspn() 获取字符串中字符的索引,或者使用我糟糕的实现:

// Returns the index of the first occurrence of a char
int string_indexof(char ch, char *everything) {
    int everythingLength = strlen(everything);
    for (int i = 0; i < everythingLength; i++) {
        if (ch == everything[i]) {
            return i;
        }
    }

    return -1;
}

答案 6 :(得分:0)

您可以使用strchr获取指向第一个匹配项的指针,并从原始char *中减去(如果不为空)以获取位置。