我可以在C中搜索字符串中的字符(X或Y)吗?

时间:2015-01-14 13:44:40

标签: c search strstr

我正在尝试在字符串中搜索字符以找到它在字符串中的位置,但是,该字符可以是三个中的一个。

我正在努力实现相同的目标:

char *foo = strstr(string, x);

其中x可以是“i”,“j”或“k。”

最好的解决方法是什么?

2 个答案:

答案 0 :(得分:7)

#include <stdio.h>
#include <string.h>

int main(void){
    char *string = "I'm trying to search a string";
    char *x = "ijk";
    char *foo = strpbrk(string, x);
    if(foo)
        printf("%c at %d\n", *foo, foo - string);//zero origin
    else
        puts("not found");
    return 0;
}

答案 1 :(得分:1)

您正在寻找strcspn()功能,

char *foo = string + strcspn(string, "ijk");

如果您只想要这个职位,那么只需

size_t position = strcspn(string, "ijk");

这是在这种情况下如何使用它的示例实现

#include <stdio.h>

const char *findany(const char *const haystack, const char *const needle)
{
    size_t skip;

    if (haystack == NULL)
        return NULL;
    if (needle == NULL)
        return haystack;

    skip = strcspn(haystack, needle);
    if (*(haystack + skip) == '\0')
        return NULL;

    return haystack + skip;
}

int main(void)
{
    const char *string = "xksjadueaailkik";
    const char *found;

    found = string;
    while ((found = findany(found, "ijk")) != NULL)
        printf("%s\n", found++);

    return 0;
}
return 0;

<强>输出中

ksjadueaailkik
jadueaailkik
ilkik
kik
ik
k

这会使findany()函数与strchr()类似,但它需要一组字符而不是一个字符。

注意:我刚注意到这是strpbrk()的重新发明,所以这是正确的解决方案,即 BLUEPIXY 的答案。