使用strtok函数时,如何将多个字符作为一个分隔符处理?

3

是否可以将多个字符一起作为分隔符使用?

我想用一个字符串来作为另一个字符串的分隔符。

char * input = "inputvalue1SEPARATORSTRINGinputvalue2SEPARATORSTRINGinputvalue2";
char * output = malloc(sizeof(char*));
char * delim = "SEPARATORSTRING";

char * example()
{
    char * ptr = strtok(input, delim);

    while (ptr != NULL)
    {
      output = strcat(output, ptrvar);
      output = strcat(output, "\n");
      ptr = strtok(NULL, delim);
    }

    return output;
}

printf 打印的返回值:

inputvalue1
inputvalue2
inputvalue3

1
char * output = malloc(sizeof(char*)); 是错误的。 - Sourav Ghosh
可能吗 - 可以。但不可以使用 strtok。您需要使用 strstr 来定位要搜索的字符串中的分隔符子字符串,然后根据分隔符字符串的长度来拆分字符串。为什么?strtok 分隔符字符串中的任何一个字符都是分隔符。事实上,您有很多分隔符并不意味着 strtok 会将所有分隔符字符组合成单个分隔符。您需要找到搜索字符串中的分隔符字符串的子字符串。这需要使用 strstr - David C. Rankin
1个回答

5
根据 strtok() 的手册页,不是的。

delim 参数指定了用于分隔解析字符串中标记的一组字节

如果您想使用多字节字符串作为分隔符,则没有内置的函数可以像 strtok() 一样工作。您需要使用 strstr()查找输入中分隔符字符串的出现位置,并手动前进。
以下是 此答案 中的示例:
char *multi_tok(char *input, char *delimiter) {
    static char *string;
    if (input != NULL)
        string = input;

    if (string == NULL)
        return string;

    char *end = strstr(string, delimiter);
    if (end == NULL) {
        char *temp = string;
        string = NULL;
        return temp;
    }

    char *temp = string;

    *end = '\0';
    string = end + strlen(delimiter);
    return temp;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接