分割字符串的一个demo
2016-03-02 11:00
369 查看
// // Created by wangxn on 2016/3/2. // #include <stdio.h> #include <stdlib.h> #include <string.h> char ** splitString(const char *, const char, int *); //函数声明 int main(void){ char * theStr = "abaaaa;ccccccc;ssssssssssss;12312412;dfhsdgfsd;hhhhhhhhhh"; //测试使用的 int size = 0; //分割之后的字符串数量值,在函数中赋值 char ** retVal = splitString(theStr, ';', &size); //调用函数,获取分割之后的多个字符串 if (retVal == NULL){ return; } char ** point = retVal; int i; for (i = 0; i < size; ++i) { //遍历,打印 printf("%s\n", *(point+i)); } for (i = 0; i < size; ++i){ //遍历,释放 free(*(point + i)); } free(point); } char ** splitString(const char * str, const char tag, int * returnSize){ if (str == NULL || tag == NULL || returnSize == NULL){ return NULL; } int length = strlen(str); //获取待分割字符串长度 char * point; //遍历字符串字符的指针 point = str; int size = 1; //分割之后的数量 int i = 0; while (point){ //循环遍历字符串,获取分割之后会产生多少个字符串 if (*point == '\0'){ //到达字符串结尾,结束循环 break; } if (tag == *point){ //在指定的分隔符处 if (i != 0 && i != length - 1){ //不是字符串第一个字符,也不是最后一个字符时, size++; } } i++; point++; } *returnSize = size; //获取分割之后会产生多少个字符串的数量 char ** retVal = (char **)malloc(size * sizeof(char *)); //分配保存多个字符串的地址的一个空间 i = 0; int index = 1; //分配一个和原始字符串相同大小的空间,并复制原始字符串到这个空间中,返回其指针, *retVal = point = strdup(str); if(point == NULL){ return NULL; } char ** ctlRetVal = retVal; while (point){ if (*point == '\0'){ //到达结尾处,跳出循环 break; } if (tag == *point){ //指针指向分割点 *point = '\0'; //将分割字符设置为'\0',作为分段标记 ctlRetVal++; *ctlRetVal = point + 1; //将下一个指针位置传递给 待返回字符串指针数组 } point++; } return retVal; }
使用到的字符串函数有:
char * strdup(const char * s);
size_t strlen(const char * s);
内存控制的函数:
void * malloc(size_t size);
void free(void * ptr);
相关文章推荐
- myeclipse提交到github出现错误 non-fast-forward
- [memory]虚拟地址空间分布
- 软键盘弹出挤压界面的问题
- 简述Linux命令初使用
- BZOJ4008 [HNOI2015]亚瑟王
- 买酒
- springmvc学习
- HBase Java API类介绍
- 简单的redis 性能测试
- eclipse下的插件添加
- android studio快捷键
- 健康是美的基础
- 让所有习惯黑暗的眼睛,都习惯光明。——顾城
- 深入解析Python设计模式编程中建造者模式的使用
- WEB安全之Token浅谈
- 使用adb命令查看apk包名信息
- 在代码中将TextView的文字颜色改为自己写的color.xml文件设置的颜色
- git图解原理
- PEB进程环境块分析研究
- PostgreSQL版本快速升级