我正在尝试使用strsep()解析文本字符串(char *),问题是分隔符必须按顺序使用:第一个标记用','第二个标记':'.. 。
sep = " ,:-,.!.";
tofree = string;
while (token = strsep(&string, " ,:-,.!."))
{
validate(token);
}
free(tofree);
strsep()由字符串中的任何sep字符分隔。 在读完strsep()和strtok_r()之后,现在仍然不见了。 有没有办法在一段时间内完成这项工作? 任何想法都会有所帮助。 Thaks
答案 0 :(得分:0)
您可以strtok()
在循环中使用一系列分隔符。
strsep()
和strtok_r()
不是ISO/IEC C11 Standard定义的函数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int separate(const char *data, const char **delims) {
char *dat = malloc(strlen(data) + 1);
char *p;
size_t delimindex = 0;
if (!dat) return 1;
strcpy(dat, data);
p = strtok(dat, delims[delimindex++]);
while (delims[delimindex] && p) {
printf("%s\n", p);
p = strtok(NULL, delims[delimindex++]);
}
free(dat);
return 0;
}
int main(void) {
const char *delims[] = {" ", ",", ":", "-", ",", ".", "!", ".", NULL};
const char *test1 = "aaa bbb,ccc:ddd-eee,fff.ggg!hhh.iii";
const char *test2 = "foobar";
separate(test1, delims);
separate(test2, delims);
return 0;
}
答案 1 :(得分:0)
您可以将分隔符放在一个数组中并逐个使用它们:
const char *seps[] = {
",",
":",
"-",
",",
".",
"!",
"."
};
char str[] = "Foo,Bar:Baz-Quirk,Whatever.Foo!Bar.Baz";
char *end;
char *result;
int i;
for (i = 0; i < sizeof(seps) / sizeof(*seps); i++) {
result = strtok_r(i ? NULL : str, seps[i], &end);
// do stuff with `result`
printf("%s\n", result);
}