【问题标题】:Split a complex string in C在C中拆分一个复杂的字符串
【发布时间】:2015-08-01 18:14:48
【问题描述】:

好的,所以我需要做的是拆分一个字符串。这是我需要拆分的示例字符串:

test_french_fries

假设我想将字符串分成两部分,之前和之后的部分:

french

因此我会得到类似的回报:

match[1]=[test_]
match[2]=[_fries]

我尝试过使用strtok(),但没有成功。似乎strtok() 在给定的所有分隔符处拆分字符串 - 所以如果我给它一个分隔符french ,它将为每个匹配的字符分隔字符串 - 这不是我想要的。

我想要一个分隔符,我可以在其中提供一个 str 或 char*,例如“french”,并且在提供的字符串之前和之后拆分字符串。

除了strtok(),我还有其他方法可以尝试实施以达到我想要的结果吗?

我非常感谢我收到的所有帮助。

-帕特里克

【问题讨论】:

标签: c string split


【解决方案1】:

strtok()只能使用单个符号作为分隔符(1个字符)进行拆分,您可以指定多个分隔符以空终止字符串的形式,但它们是单独的。要将一个字符串与另一个字符串作为分隔符拆分,您必须编写一个自定义函数。下面的示例与strtok() 一样工作,但使用以空字符结尾的 C 字符串作为分隔符:

#include <stdio.h>

char *strstrtok(char *src, char *sep)
{
    static char *str = NULL;
    if (src) str = src;
    else src = str;

    if (str == NULL)
        return NULL;

    char *next = strstr(str, sep);
    if (next)
    {
        *next = '\0';
        str = next + strlen(sep);
    }
    else
        str = NULL;

    return src;
}

int main(void) {
    char buf[] = "yoursepmamasepissepsosepfatsepsheseptooksepasepspoonseptosepthesepsuperbowl";
    char *token = strstrtok(buf, "sep");
    while (token)
    {
        printf("%s ", token);
        token = strstrtok(NULL, "sep");
    }
    return 0;
}

注意就像strtok(),这个解决方案不是线程安全的。

在 Ideone 上查看它:http://ideone.com/cjRGgJ

【讨论】:

  • 最好使用strtok_r作为模型并采用额外的save指针,而不是使用不可重入/线程安全的静态变量...
  • 是的,这是完美的。我刚开始写这样的东西,但你的正是我需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多