C中的String.indexOf函数

有没有C库函数将返回字符串中的字符的索引?

到目前为止,我发现的所有函数都是strstr函数,它会返回找到的char *,而不是原始字符串中的位置。

0

7 答案

If you are not totally tied to pure C and can use string.h there is strchr() See here

0
额外
我不确定“纯C”是什么意思,但strchr()和string.h已经成为标准C的20年的一部分。
额外 作者 Robert Gamble,

编辑:strchr是更好的只有一个字符。 指针aritmetics说“Hellow!”:

char *pos = strchr (myString, '#');
int pos = pos ? pos - myString : -1;

Important: strchr() returns NULL if no string is found

0
额外
你有没有用完变量名? ;-)
额外 作者 Isak Savo,
为什么你的评论得到这么多upvotes?
额外 作者 theonlygusti,
@theonlygusti我认为这是最近的(我读的日期是16年11月15日),没有必要重振旧的对话来解释一个不好的笑话。如果我不得不猜测,我会说一个mod看到了我的“过时”评论标记,并将其作为删除评论的提示,因为它已经过时了。或者至少毫无意义。
额外 作者 Nic Hartley,

你可以使用strstr来完成你想要的。例:

char *a = "Hello World!";
char *b = strstr(a, "World");

int position = b - a;

printf("the offset is %i\n", position);

这产生了结果:

the offset is 6
0
额外
UB如果不匹配(减去不在同一对象内的指针)。
额外 作者 R..,

写你自己:)

Code from a BSD licensed string processing library for C, called zString

https://github.com/fnoyanisi/zString

int zstring_search_chr(char *token,char s){
    if (!token || s=='\0')
        return 0;

    for (;*token; token++)
        if (*token == s)
            return 1;

    return 0;
}
0
额外

strstr returns a pointer to the found character, so you could use pointer arithmetic: (Note: this code not tested for its ability to compile, it's one step away from pseudocode.)

char * source = "test string";         /* assume source address is */
                                       /* 0x10 for example */
char * found = strstr( source, "in" ); /* should return 0x18 */
if (found != NULL)                     /* strstr returns NULL if item not found */
{
  int index = found - source;          /* index is 8 */
                                       /* source[8] gets you "i" */
}
0
额外
未定义的行为,如果找不到字符。如果 strchr 就足够了,你也不应该使用 strstr (带或不带拼写错误)。
额外 作者 R..,
的确,但是OP要求一个字符不是一个子字符串。当然,如果您将字符宽泛地解释为包含多字节字符,那么 strstr 是正确的函数。
额外 作者 R..,
@R .. - 我修正了错字,并向伪代码添加了错误检查。另外, strchr 不能用于查找多字符序列,是吗?
额外 作者 Bill,
@R .. - 由于OP正在讨论文本中的字符,而不是在 char 存储名称中,所以我给出了一个解决方案,希望能为像?这样的字符工作。你反对?
额外 作者 Bill,

我觉得

size_t strcspn(const char * str1,const char * str2);

是你想要的。以下是此处所示的示例:

/* strcspn example */
#include 
#include 

int main ()
{
  char str[] = "fcba73";
  char keys[] = "1234567890";
  int i;
  i = strcspn (str,keys);
  printf ("The first number in str is at position %d.\n",i+1);
  return 0;
}
0
额外
上面的评论非常重要 - 像例子中那样做不会模仿indexOf(),所以原始答案几乎是不正确的。
额外 作者 GreenieMeanie,
strcspn 更像是 String.IndexOfAny() - 在 keys 数组中搜索任何字符。但是,它会做的
额外 作者 Isak Savo,
这实际上就是您要查找的内容: stackoverflow.com/a/1479401/3395760
额外 作者 Ale Muzzi,

你可以写

s="bvbrburbhlkvp";
int index=strstr(&s,"h")-&s;

在给定的图形中找到'h'的索引。

0
额外
如果未找到字符串, strstr 可能会返回 NULL
额外 作者 Ivan,