C语言实现用指定字符切割字符串并返回数组
2017-08-03 00:53
501 查看
C语言没有提供类似JS中split和PHP中的explode方法,只有一个不太好用的strtok, 但是像用 , 去切割字符串 “aaa,bbb,ccc,ddd” 返回一个字符串数组的功能还是比较常用的,所以自己实现了一个类似的方法,实现的过程还是比较麻烦的,代码仅供参考,如有更好的方法欢迎大家交流提高。
以上代码在给子串分配空间都多分配了一个字节的空间,这是因为C语言的字符串是以 '\0' 结尾,多出来的一个字节用来存储这个'\0'
对于首尾出现的切割符以及多个切割符连续的情况,会切割出空字符串。
以下是调用示例:
运行结果:
由于使用了堆内存,所以对调用结果需要释放内存,可以单独再写一个方法专门用于释放结果:
void freeExplode(char **arr, int size)
{
int i;
for(i = 0; i < size; i++)
{
free(arr[i]);
}
free(arr);
}
That's all ^^
#include <stdio.h> #include <string.h> #include <stdlib.h> //返回一个 char *arr[], size为返回数组的长度 char **explode(char sep, const char *str, int *size) { int count = 0, i; for(i = 0; i < strlen(str); i++) { if (str[i] == sep) { count ++; } } char **ret = calloc(++count, sizeof(char *)); int lastindex = -1; int j = 0; for(i = 0; i < strlen(str); i++) { if (str[i] == sep) { ret[j] = calloc(i - lastindex, sizeof(char)); //分配子串长度+1的内存空间 memcpy(ret[j], str + lastindex + 1, i - lastindex - 1); j++; lastindex = i; } } //处理最后一个子串 if (lastindex <= strlen(str) - 1) { ret[j] = calloc(strlen(str) - lastindex, sizeof(char)); memcpy(ret[j], str + lastindex + 1, strlen(str) - 1 - lastindex); j++; } *size = j; return ret; }
以上代码在给子串分配空间都多分配了一个字节的空间,这是因为C语言的字符串是以 '\0' 结尾,多出来的一个字节用来存储这个'\0'
对于首尾出现的切割符以及多个切割符连续的情况,会切割出空字符串。
以下是调用示例:
int main() { int size; char **ret = explode(',', ",aaabbb,,ddd,eeee,ffff,fggg,,", &size); int i; for(i = 0; i < size; i++) { printf("%s\n", ret[i]); free(ret[i]); } free(ret); return 0; }
运行结果:
[root@localhost c]# ./a.out aaabbb ddd eeee ffff fggg [root@localhost c]#
由于使用了堆内存,所以对调用结果需要释放内存,可以单独再写一个方法专门用于释放结果:
void freeExplode(char **arr, int size)
{
int i;
for(i = 0; i < size; i++)
{
free(arr[i]);
}
free(arr);
}
That's all ^^
相关文章推荐
- C语言字符切割函数的实现——不需要自己指定分配多少个字符串分组
- Lua 用指定字符或字符串分割输入字符串,返回包含分割结果的数组
- C 语言 实现 字符串 分割 函数(返回"二维字符数组",及分割后的字符数组的长度)
- 【C语言】自己编写程序实现strchr函数。即在给定字符串中找特定的字符并返回该处指针。
- 【C语言】模拟实现strchr函数.即在一个字符串中查找一个字符第一次出现的位置并返回
- 通过JNI实现C语言设置Java二维字符串数组并返回该字符串数组
- 随机生成指定长度字符字符串(C语言实现)
- oracle怎么切割一个指定的字符串按指定的标志符分割成字符数组
- 编写一个方法用于验证指定的字符串是否为反转字符,返回true和false。请用递归算法实现
- 【c语言】模拟实现strchr函数,功能:在一个字符串中查找一个字符第一次出现的位置,如果没有出现返回NULL
- c语言:返回指定字符在指定字符串中第n次出现的位置(从0开始计算)
- C语言实现:统计字符串中字母个数,找出最大字符数组
- C语言实现:替换字符串中指定字符
- C 语言 实现 字符串 分割 函数(返回"二维字符数组",及分割后的字符数组的长度)
- 【C语言】自己编写程序实现strrchr函数,即在给定字符串中找特定的字符并返回最后出现的位置
- 发现一个c语言中用字符数组和char型指针管理字符串一个很容易搞混的地方
- C#实现字符串按多个字符采用Split方法分割得到数组
- Oracle中通过substr和instr实现截取指定字符之间的字符串:
- C语言中字符数组和字符串指针分析
- MySQL数据库,根据传入的字符换进行切割,并获得指定位置被切割的字符串。