100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > C语言实现split()函数:字符串分割

C语言实现split()函数:字符串分割

时间:2020-01-11 10:32:35

相关推荐

C语言实现split()函数:字符串分割

C语言实现split函数:字符串分割

代码如下运行结果

Python中有split()函数,觉得很好用,但在C语言的标准库下却没有,只好手动实现了

代码如下

/** 函数: split()* 功能: 指定分隔符分割字符串* 返回值: 一个指向包含char*指针的数组的指针,即char **pt*/#include <stdio.h>#include <string.h>#include <stdlib.h>char **split(const char *source, char flag);int main(){char str1[] = " abs mk oi pp";char str2[] = "*hello, world*";char **p1, **p2;p1 = split(str1, ' ');for (int i = 0; p1[i] != NULL; i++)printf("p1[%d] = %s\n", i, p1[i]);putchar('\n');p2 = split(str2, '*');for (int i = 0; p2[i] != NULL; i++)printf("p2[%d] = %s\n", i, p2[i]);// 释放内存free(p2);free(p1);return 0;}char **split(const char *source, char flag){char **pt;int j, n = 0;int count = 1;int len = strlen(source);// 动态分配一个 *tmp,静态的话,变量len无法用于下标char *tmp = (char*)malloc((len + 1) * sizeof(char));tmp[0] = '\0';for (int i = 0; i < len; ++i){if (source[i] == flag && source[i+1] == '\0')continue;else if (source[i] == flag && source[i+1] != flag)count++;}// 多分配一个char*,是为了设置结束标志pt = (char**)malloc((count+1) * sizeof(char*));count = 0;for (int i = 0; i < len; ++i){if (i == len - 1 && source[i] != flag){tmp[n++] = source[i];tmp[n] = '\0'; // 字符串末尾添加空字符j = strlen(tmp) + 1;pt[count] = (char*)malloc(j * sizeof(char));strcpy(pt[count++], tmp);}else if (source[i] == flag){j = strlen(tmp);if (j != 0){tmp[n] = '\0'; // 字符串末尾添加空字符pt[count] = (char*)malloc((j+1) * sizeof(char));strcpy(pt[count++], tmp);// 重置tmpn = 0;tmp[0] = '\0';}}elsetmp[n++] = source[i];}// 释放tmpfree(tmp);// 设置结束标志pt[count] = NULL;return pt;}

运行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。