Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在字符串中搜索C中的字符(X或Y)吗?_C_Search_Strstr - Fatal编程技术网

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

我可以在字符串中搜索C中的字符(X或Y)吗?,c,search,strstr,C,Search,Strstr,我试图在字符串中搜索一个字符以找到它在字符串中的位置,但是,该字符可以是三个字符之一 我正试图实现这一点: char *foo = strstr(string, x); 其中x可以是i、j或k 进行此操作的最佳方式是什么?您正在寻找函数 char *foo = string + strcspn(string, "ijk"); 如果你只想要这个职位,那就 size_t position = strcspn(string, "ijk"); 这是如何在本例中使用它的示例实现 #include &

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

我正试图实现这一点:

char *foo = strstr(string, x);
其中x可以是i、j或k

进行此操作的最佳方式是什么?

您正在寻找函数

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;
这使得findany函数类似于strchr,但它需要一组字符而不是单个字符


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

对我来说是新的。问一下,这是否满足i、j或k的要求?strcspn返回从第一个字符到第一个出现的ijk的子字符串的大小。苏拉夫在第一次事件中为原告辩护。@LPs在这种情况下它仍然有用。
ksjadueaailkik
jadueaailkik
ilkik
kik
ik
k
#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;
}