在做C语言开发,尤其是嵌入式开发的时候,经常会用到字符串的处理函数,虽然C语言提供了很多库函数用以处理字符串,但是都不够智能化,所以常常需要自己根据这些基本的库函数自己定义封转自己的字符串处理函数。
其中,字符串切割函数Split(类似C#、Java中String对象split函数,故此称之),会经常用到,但是C语言中并没有该函数,只是有一个基本的切割函数strtok实现切割的功能,但是不太好用。
现在就根据这个函数,来实现智能化的字符串切割函数,可以不必指定需要划分多少个分组,只需要你提供一个分隔符和源字符串就行。
函数如下所示(已做过测试,可以直接饮用):
#include <stdio.h>
#include <string.h>
#include <malloc.h>
/**
* 用来获取要被分割字符串中特定分隔符的个数:分隔符数+1=可以划分的字符数组数
* @para char *str 需要被分割的源字符串
* @para const char *del 需要指定的分割符
*/
int strsplinum(char *str, const char*del) //判断源字符串中有多少个指定的分隔符,据此可以知道可以划分出多少个字符串分组
{
char *first = NULL;
char *second = NULL;
int num = 0;
first = strstr(str,del);
while(first != NULL)
{
second = first+1;
num++;
first = strstr(second,del);
}
return num;
}
/**
* 字符分割函数
* @para char **arr 分割好的字符串通常是二维字符数组,用二维指针来获取
* @para char *str 要被分割的字符串
* @para const char *del 特定的分割符
*/
void split( char **arr, char *str, const char *del)
{
char *s =NULL;
s=strtok(str,del);
while(s != NULL)
{
*arr++ = s;
s = strtok(NULL,del);
}
}
int main()
{
char str[] = "aaaa|bbbb|cccc|ddd|eee|ffff"; //需要被分割的字符串
const char *del = "|"; //分割符
int numTest = 1; //用来获得分割符数
int i=0; //用来循环
//char *arr[4];
char **arr; //指向二维字符数组的指针
numTest = strsplinum(str,del); //得到被分割字符串中字符数
printf("the numbers of arry is : %d /n",numTest+1);
arr = (char **)malloc(sizeof(char *) * numTest); //为指针数组分配
split(arr,str,del); //分割函数
while(i<=numTest)
{
printf("%s/n",*(arr+i++));
}
return 0;
}
运行结果如下图所示: