strtok()
ループ内の区切り文字の配列を使用できます。
strsep()
およびISO/IECC11標準で定義された機能でstrtok_r()
はありません。
#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;
}