C语言根据特定的符号分割字符串 如:字符串"a,bbb,ccc"->数组[a,bbb,ccc]
2013-12-20 21:15
501 查看
//根据符号','分割字符串,例如:字符串"a,bbb,ccc"->数组[a,bbb,ccc] author:wangchangshuai jlu char** splitFileNames(const char* strFileNames, int* count) { char** result = NULL, *strFileNamesCopy = NULL; if ((strFileNamesCopy = (char*) myMalloc(strlen(strFileNames) + 1)) == NULL) { myLog("Malloc heap failed!\n"); return NULL; } strcpy(strFileNamesCopy, strFileNames); char *p, *pre = strFileNamesCopy; //统计符号','的个数,假设文件名的个数是符号','的个数+1 int i, supposeCount = 0, len = strlen(strFileNames); for (i = 0; i < len; ++i) { if (strFileNames[i] == ',') { supposeCount++; } } supposeCount += 1; //统计结束 if ((result = (char**) myMalloc(sizeof(char*) * supposeCount)) == NULL) { myLog("Malloc heap failed!\n"); return NULL; } //开始分割,同时统计实际文件名的个数 (*count) = 0; for (i = 0; (p = strchr(strFileNamesCopy, SPLIT_FLAG)) != NULL; ++i) { if (pre == p) { //假如两个逗号之间没有字符串 *p = '\n'; pre = p + 1; continue; } if ((result[*count] = (char*) myMalloc(p - pre + 1)) == NULL) { myLog("Malloc heap failed!\n"); return NULL; } memset(result[*count], 0, p - pre + 1); memcpy(result[*count], pre, p - pre); *p = '\n'; pre = p + 1; ++(*count); } if (*pre != '\0') { //假如最后一个逗号后面有字符串 if ((result[*count] = (char*) myMalloc(strlen(pre) + 1)) == NULL) { myLog("Malloc heap failed!\n"); return NULL; } memset(result[*count], 0, strlen(pre) + 1); strcpy(result[*count], pre); ++(*count); } if (pre == strFileNamesCopy) { //假如没有找到符号“,” if ((result[0] = (char*) myMalloc(strlen(strFileNamesCopy) + 1)) == NULL) { myLog("Malloc heap failed!\n"); return NULL; } memset(result[0], 0, strlen(strFileNamesCopy) + 1); strcpy(result[0], strFileNamesCopy); *count = 1; } myFree(strFileNamesCopy); return result; }
相关文章推荐
- 理工大学ACM平台题答案关于C语言 1010 A+B for Input-Output Practice (I)
- 读c语言深度剖析 -- typedef小结(3) 定义结构体
- 理工大学ACM平台题答案关于C语言 1006 Sum Problem
- [分享] C++ How to Program, 8/E (C++大学教程 第8版) 英文版PDF下载
- c/c++各种字符、字符串类型转换
- c语言if-else的效率比较
- socket穿透代理代码(C++版)
- 理工大学ACM平台题答案关于C语言 1014 A+B for Input-Output Practice (V)
- C++对带有分隔符的字符串 分割为数字的通用解决方案
- C++编程规范之24:总是编写内部#include保护符,绝不要编写外部#include保护符
- C++词典
- C++ 继承的访问权限
- C语言经典著作导读
- 寻找C语言和.NET之间的桥梁
- ubuntu11.10搭建eclipse C++开发环境
- usaco-Calf Flac
- c语言的陷阱与缺陷小记
- 非零基础学习iOS开发1-C语言
- C++命名空间 .
- c++我回来了,工作回顾