通过子字符串拆分字符串

Ryo*_*Ryo 4 c string tokenize strtok

我有以下字符串:

char str[] = "A/USING=B)";
Run Code Online (Sandbox Code Playgroud)

我想分获得独立的AB值与/USING=作为分隔符

我该怎么做?我知道,strtok()但它只是被一个字符分割为分隔符。

M O*_*ehm 7

正如其他人指出的那样,您可以使用strstrfrom<string.h>在字符串中查找分隔符。然后复制子字符串或修改输入字符串以拆分它。

这是一个返回拆分字符串第二部分的实现。如果字符串无法拆分,则返回NULL且原始字符串不变。如果需要将字符串拆分成更多的子串,可以重复调用尾部的函数。第一部分将是输入字符串,可能会缩短。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *split(char *str, const char *delim)
{
    char *p = strstr(str, delim);

    if (p == NULL) return NULL;     // delimiter not found

    *p = '\0';                      // terminate string after head
    return p + strlen(delim);       // return tail substring
}

int main(void)
{
    char str[] = "A/USING=B";
    char *tail;

    tail = split(str, "/USING=");

    if (tail) {
        printf("head: '%s'\n", str);
        printf("tail: '%s'\n", tail);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)


Sou*_*osh 1

我知道strtok(),但它只是被一个字符分割为分隔符

不,不是。

根据手册页strtok(),(重点是我的)

char *strtok(char *str, const char *delim);

[...] 该delim参数指定一组字节,用于分隔已解析字符串中的标记。[...]已解析字符串中两个或多个连续分隔符字节的序列被视为单个分隔符。[...]

因此,它不必是您提到的“一个字符” 。您可以使用字符串(如您的情况)"/USING="作为分隔符来完成工作。

  • 您给人的印象是使用 strtok 是一个好主意,并且 OP 会假设它将解析其中包含 /USING= 的其他字符串。您至少应该警告他,它仅适用于他的示例字符串,不适用于任何包含子字符串 /USING= 的任意字符串 (2认同)