字符串分割函数(不用库函数)
2016-03-23 13:49
447 查看
/* 一个字符串里面有n个ch字符, 一般能够把原字符串分割成n-1(字符在开始和结尾), n(字符在开始或结尾)或n+1(字符在非开始和结尾)个 */ char** strsplit(char const *str, char ch) { char **res;//存放结果 char const* str1 = &str[0];//由于要遍历两次,所以先记录第一个元素位置 int i = 0;//用于计算出现次数 while (*str != '\0') { if (*str == ch) { i++; } str++; }//i为出现的次数 if (i == 0) { return NULL; } res = (char**)malloc(sizeof(char*)*(i + 1));//分配二维数组行数,都按n+1计算,如果字符出现在第一个则返回的第一行为空 int len = 0;//每一个字符的长度 char buf[100];//临时存储字符的数组 i = 0; while (*str1 != '\0') { if (*str1 == ch)//若没有碰到相同字符则一直向buf里面放置, {//如果碰到,则先分配空间,然后把buf放进里面,再加上\0 buf[len] = '\0'; res[i] = (char*)malloc(sizeof(char)*(len + 1)); int k = 0; while (buf[k] != '\0') { res[i][k] = buf[k]; k++; } res[i][k] = '\0'; len = 0; i++; } else { buf[len++] = *str1; } str1++; } res[i] = (char*)malloc(sizeof(char)*(len + 1)); int k = 0; while (buf[k] != '\0') { res[i][k] = buf[k]; k++; } res[i][k] = '\0'; return res; }
略显繁琐,不过能用。
补充一个线程不安全的库函数法:
char ori[] = "21123248299"; for (char * token = strtok(ori, "2"); token != NULL; token = strtok(NULL, "2")) { printf("%s\n", token); }
方法简单,但是strtok函数是在静态区进行分割的函数,简单用用还行,尽量还是多用自己编写的函数吧。
相关文章推荐
- (六)6.8 Neurons Networks implements of PCA ZCA and whitening
- RequireJS禁止缓存
- foregroundRender_render
- maven私服在开发中的具体应用篇
- iOS9问题汇总
- 关于ERROR: While executing gem ... (Errno::EPERM)Operation not permitted - /usr/bin/xcodeproj的问题
- Java核心知识点-synchronized关键字
- 使用nginx配置Laravel中的虚拟站点
- spring学习笔记(14)引介增强详解:定时器实例:无侵入式动态增强类功能
- shiro配置filterchaindefinitions实现多角色判定方法的重写
- J2EE插件开发框架之简述
- Struts2 doubleselect错误Expression parameters.formName
- Leet Code OJ 2. Add Two Numbers [Difficulty: Medium]
- Hibernate 多对多关联映射, 中间表加查询条件
- Delphi 资源文件( .res)
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建(转载)
- CodeForces-632B-Alice, Bob, Two Teams
- maven私服在开发中的具体应用篇
- 100. Same Tree
- 父元素高度为auto:子元素使用top:-50%没有效果的问题