#include<stdio.h> #include<string.h> #include<stdlib.h> char *bfstrtok(char *buf, char const *sep) { static char *flag = NULL; static int len = 0; char * retbuf = NULL; if(buf) { len = strlen(buf); retbuf = buf; flag = retbuf; } else { if(len <= 0) { return flag; } flag ++; len --; retbuf = flag; } for(; *flag != '/0'; flag++) { for(int i = 0; i < strlen(sep); i++) { if(*flag == sep[i]) { goto line1; } } } line1: if(*flag != '/0') { *flag = '/0'; } len = len - ( (int)flag - (int)retbuf + 1); return retbuf; } int main() { { char buf[] = "1111 2222 3333 4444|5555"; char *pflag = bfstrtok(buf, " "); printf("%s/n", pflag); pflag = bfstrtok(NULL, " |"); printf("%s/n", pflag); pflag = bfstrtok(NULL, " |"); printf("%s/n", pflag); pflag = bfstrtok(NULL, " |"); printf("%s/n", pflag); pflag = bfstrtok(NULL, " "); printf("%s/n", pflag); pflag = bfstrtok(NULL, " "); printf("%s/n", pflag); pflag = bfstrtok(NULL, " "); printf("%s/n", pflag); pflag = bfstrtok(NULL, " "); printf("%s/n", pflag); } { char buf[] = "1111 2222 3333 4444|5555"; char *pflag = bfstrtok(buf, " "); printf("%s/n", pflag); pflag = bfstrtok(NULL, " |"); printf("%s/n", pflag); pflag = bfstrtok(NULL, " |"); printf("%s/n", pflag); pflag = bfstrtok(NULL, " |"); printf("%s/n", pflag); pflag = bfstrtok(NULL, " "); printf("%s/n", pflag); pflag = bfstrtok(NULL, " "); printf("%s/n", pflag); pflag = bfstrtok(NULL, " "); printf("%s/n", pflag); pflag = bfstrtok(NULL, " "); printf("%s/n", pflag); } }