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

Posted

技术标签:

【中文标题】c中是不是有一个函数可以返回char数组中char的索引?【英文标题】:Is there a function in c that will return the index of a char in a char array?c中是否有一个函数可以返回char数组中char的索引? 【发布时间】:2010-12-01 13:14:36 【问题描述】:

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

例如:

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

int index = findIndexOf( values, find );

【问题讨论】:

strchr() String.indexOf function in C的可能重复 【参考方案1】:

strchr 返回指向第一次出现的指针,因此要找到索引,只需使用起始指针的偏移量即可。例如:

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

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

【讨论】:

我的问题,如何在字符中找到 indexes。如果字符串中有 2 个 E s? 你没有告诉我要做什么#include @turmuka 那么它只会返回第一次出现【参考方案2】:

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

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

【讨论】:

【参考方案3】:
int index = strchr(values,find)-values;

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

【讨论】:

NULL 上的指针运算是未定义的行为。它不必返回任何特定的值。 是的,它不是必须的,但它通常会:)。我的观点是,这里应该期待 NULL 指针。 仅仅因为它似乎对你有用,并不意味着它是正确的。当指针足够高时,您的代码可能会随机失败(我实际上已经检查过了,请参阅gist.github.com/GlitchMr/8056175(应该是一个无限循环,如果这可以正常工作)。 我说的不对。是的,你指出的非常正确,但这只是因为行为是事实上定义的,你可以这样做;)【参考方案4】:

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

【讨论】:

【参考方案5】:

strpos 呢?

#include <string.h>

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

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

【讨论】:

我不认为它存在于 C 标准库中,尽管我可能是错的。 就我个人而言,我对 strchr 答案更有信心,我真的很希望将其中一个标记为答案。我只找到了一段非常古老的使用该函数的源代码,当我考虑它时,我不知道它有多标准。 strpos() 不是标准的 C(甚至 C++)函数。在php等中很常见... 奇怪,但我确实有一段使用它的 C 代码。但正如我所说,我不知道它有多标准。 strpos 不是 C 标准库的一部分 - 但它可能存在于大多数系统中。【参考方案6】:

您可以使用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;

【讨论】:

【参考方案7】:

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

【讨论】:

以上是关于c中是不是有一个函数可以返回char数组中char的索引?的主要内容,如果未能解决你的问题,请参考以下文章

C++怎么把string 转换为char型数组

请问这个C语言中有参数的函数是怎么传递值的,调用的时候没有参数啊。

函数返回 Int 而不是 char

如何从string类型的变量 返回一个char* 类型

如何在 c 中返回 char (*)[6]?

如何使用指针从2D char数组中生成一个句子