C语言字符切割函数的实现——不需要自己指定分配多少个字符串分组

      在做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;
}

 

 

运行结果如下图所示:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值