【发布时间】:2010-12-01 13:14:36
【问题描述】:
c 中有一个函数可以返回 char 数组中 char 的索引吗?
例如:
char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';
int index = findIndexOf( values, find );
【问题讨论】:
标签: c string function indexing char
c 中有一个函数可以返回 char 数组中 char 的索引吗?
例如:
char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';
int index = findIndexOf( values, find );
【问题讨论】:
标签: c string function indexing char
strchr 返回指向第一次出现的指针,因此要找到索引,只需使用起始指针的偏移量即可。例如:
char values[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char find = 'E';
const char *ptr = strchr(values, find);
if(ptr) {
int index = ptr - values;
// do something
}
【讨论】:
E s?
#include
还有size_t strcspn(const char *str, const char *set);它返回包含在set 中的s 中第一次出现的字符的索引:
size_t index = strcspn(values, "E");
【讨论】:
int index = strchr(values,find)-values;
请注意,如果没有找到find,则strchr 返回NULL,因此索引将为负数。
【讨论】:
NULL 上的指针运算是未定义的行为。它不必返回任何特定的值。
安全的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;
}
【讨论】:
strpos 呢?
#include <string.h>
int index;
...
index = strpos(values, find);
请注意,strpos 需要一个以零结尾的字符串,这意味着您应该在末尾添加一个 '\0'。如果你不能这样做,你将不得不手动循环和搜索。
【讨论】:
您可以使用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;
}
【讨论】:
您可以使用strchr 获取指向第一个匹配项的指针,然后从原始 char* 中减去该指针(如果不为空)以获取位置。
【讨论】: