如何根据C中的多个分隔符分隔字符串?

时间:2016-01-08 14:43:57

标签: c string extract

我输入了(first_string*second_string)表单,其中*可以是三个字符之一,xyz。我需要将first_stringsecond_string提取为自己的字符串。

如果strchr始终相同,我可以使用*执行此操作,但我不确定当*是其中之一时如何执行此操作三个可能的角色。

我假设我需要使用

形式的函数
int star(char g) {
    if (g == 'x' || g == 'y' || g == 'z') {
        return 1;
    }
    else {
        return 0;
    }
}

但我不确定如何从这里开始。任何人都可以帮助我吗?

3 个答案:

答案 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);
}