在C中分割复杂的字串

硬玉米饼

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

test_french_fries

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

french

因此,我会得到类似以下内容的回报:

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

我曾尝试弄乱,strtok()但没有成功。似乎strtok()在给定的所有delims处拆分了字符串-因此,如果我给它一个delim french,它将为每个匹配的字符分隔字符串-这不是我想要的。

我想要一个delim,可以在其中提供str或char *(例如“ french”),并在提供的字符串前后对字符串进行拆分。

除了strtok()我可以尝试实现自己想要的结果之外还有其他方法吗?

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

-帕特里克

黑纳德

strtok()只能使用单个符号作为分隔符(1个字符)进行分隔,您可以以以空值终止的字符串形式指定多个分隔符,但是它们会被单独删除。要用另一个字符串作为分隔符分割一个字符串,您将必须编写一个自定义函数。以下示例的工作方式与相似strtok(),但使用以null终止的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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章