c语言之split实现

来源:互联网 发布:那些直播软件有黄播 编辑:程序博客网 时间:2024/05/20 09:05
#include <stdlib.h>#include <string.h>int strsplit (const char *str, char *parts[], const char *delimiter) {  char *pch;  int i = 0;  char *copy = NULL, *tmp = NULL;  copy = strdup(str);  if (! copy)    goto bad;  pch = strtok(copy, delimiter);  tmp = strdup(pch);  if (! tmp)    goto bad;  parts[i++] = tmp;  while (pch) {    pch = strtok(NULL, delimiter);    if (NULL == pch) break;    tmp = strdup(pch);    if (! tmp)      goto bad;    parts[i++] = tmp;  }  free(copy);  return i; bad:  free(copy);  for (int j = 0; j < i; j++)    free(parts[j]);  return -1;}void test001(){  char str[] = "hello\nworld\n1024";    char *parts[8];    size_t size = strsplit(str, parts, "\n");    int i = 0;    for (; i < size; ++i) {        printf("%s\n", parts[i]);    }}void test002(){    char str[] = "Flight attendants of Chengdu Airlines take a photo in front of the regional jet ARJ21-700 at Chengdu Shuangliu International Airport in Southwest China's Sichuan province on June 28, 2016. [Photo/Xinhua]";    char *parts[1024];    size_t size = strsplit(str, parts, " ");    int i = 0;    for (; i < size; ++i) {        printf("%s\n", parts[i]);    }}void test003(){  char str[] = "hello\u4e2d\u65871024world\u4e2d\u65871024nihao\u4e2d\u6587";    char *parts[8];    size_t size = strsplit(str, parts, "1024");    int i = 0;    for (; i < size; ++i) {        printf("%s\n", parts[i]);    }}void test004(){  char str[] = "hello中文1024world中文1024nihao中文";    char *parts[8];    size_t size = strsplit(str, parts, "中文");    int i = 0;    for (; i < size; ++i) {        printf("%s\n", parts[i]);    }}//https://github.com/jwerle/strsplit.cint main (void) {    //test001();    test003();    test004();    return 0;}
0 0