好的,所以我需要做的是拆分一个字符串。这是我需要拆分的示例字符串:
test_french_fries
并且让我说我想把字符串分成两部分,前后部分:
french
因此我会得到类似的回复:
match[1]=[test_]
match[2]=[_fries]
我曾尝试弄乱strtok()
,但我没有成功。似乎strtok()
在给定的所有delim中拆分字符串 - 所以如果我给它一个french
的分隔符,它将为匹配的每个字符分隔字符串 - 这是ISN&#T; T我想要的是。
我想要一个delim,我可以提供一个str或char *,例如" french"并且在提供的字符串之前和之后拆分字符串。
除了strtok()
之外还有其他方法可以尝试实现以达到我想要的结果吗?
我非常感谢我收到的所有帮助。
-Patrick
答案 0 :(得分:5)
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