我输入了(first_string*second_string)
表单,其中*
可以是三个字符之一,x
,y
或z
。我需要将first_string
和second_string
提取为自己的字符串。
如果strchr
始终相同,我可以使用*
执行此操作,但我不确定当*
是其中之一时如何执行此操作三个可能的角色。
我假设我需要使用
形式的函数int star(char g) {
if (g == 'x' || g == 'y' || g == 'z') {
return 1;
}
else {
return 0;
}
}
但我不确定如何从这里开始。任何人都可以帮助我吗?
答案 0 :(得分:4)
使用strpbrk()
代替strchr()
。
实施例
char *found;
if ((found = strpbrk(source, "xyz")) != NULL)
{
// `found' now points to one of `x' or `y' or `z' in `source'
}
一个明显的缺陷是,如果" 字符串"包含这些字符。
答案 1 :(得分:3)
有很多方法可以完成这项任务。例如,您可以使用标头strtok
中声明的标准C函数<string.h>
。
例如
#include <stdio.h>
#include <string.h>
int main( void )
{
char s[] = "first_stringxsecond_string";
const char *delimiters = "xyz";
char *p = strtok( s, delimiters );
while ( p )
{
puts( p );
p = strtok( NULL, delimiters );
}
}
程序输出
first_string
second_string
考虑到函数strtok通过插入终止零来更改原始字符串。因此,您可能不会将该函数应用于字符串文字。
如果您不能更改原始字符串,则应考虑其他方法。
答案 2 :(得分:0)
给出star()
函数定义
char *ptr;
if(star(g))
{
ptr = strchr(s, g);
if(ptr)
*ptr = '\0';
printf("First string = %s\n", s);
if(ptr)
printf("Second string = %s\n", ptr + 1);
}