我正在尝试在字符串中搜索字符以找到它在字符串中的位置,但是,该字符可以是三个中的一个。
我正在努力实现相同的目标:
char *foo = strstr(string, x);
其中x可以是“i”,“j”或“k。”
最好的解决方法是什么?
答案 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 的答案。