找回密码
 注册
搜索
查看: 1119|回复: 4

[讨论] 求高手帮忙实现C语言字符切割函数split

[复制链接]
发表于 2010-9-27 14:34:49 | 显示全部楼层 |阅读模式
在项目开发中,遇到要处理字符串,但是字符串的处理没有C#、Java这样的高级语言来的方便,每次使用都得需要自己定义。先在需要用到字符切割函数Split了,需要自己定义一下。
下面的是我自己定义的,但是不太智能化,希望各位高手帮帮忙,不然我可真的就死大发了。先贴出我的拙劣代码:
#include <stdio.h>
#include <string.h>

int strsplinum(char *str, const char*del)   //判断总共有多少个分隔符,目的是在main函数中构造相应的arr指针数组
{
     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;
}



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";      
        const char *del = "|";               //分隔符
        int numTest = 1;
        int i=0;
        char *arr[4];   //利用指针数组对应分割好的字符串数组(即二维数组中的行数组)
     
        numTest = strsplinum(str,del);
        printf("the numbers of arry is : %d \n",numTest+1);
        split(arr,str,del);
       
        while(i<=numTest)
        {
                printf("%s\n",*(arr+i++));   //打印分割好的字符串
        }
        return 0;
}


最开始定义函数strsplinum的目的是想动态分配刚刚好的指针数组arr来对应分割好的字符串数组,
这样就完全实现了C#中split的功能,但是,很遗憾,没有实现,因为C语言中,必须是先定义变量,
后调用函数,也就是说,numTest通过strsplinum来获取值后,不能再写char *arr[numTest];
这样的限制就无法实现动态智能分配相应的字符串数组了。
求各位高手帮帮忙,小弟感谢了。
 楼主| 发表于 2010-9-30 12:41:48 | 显示全部楼层
被分割后的字符串,必定是放在二维数组中,使用双重指针就是为了来控制二维数组,其实本质上是一样
点评回复

使用道具 举报

发表于 2010-9-28 11:20:58 | 显示全部楼层
[em11][em11][em11]我在MTK上有实现,不过我不是用双重指针去存放的...我是用二维数组的.
点评回复

使用道具 举报

 楼主| 发表于 2010-9-28 08:59:43 | 显示全部楼层
后来自己翻查C语言函数大全,发现sscanf和memchar也有字符处理功能,真是长了见识;在网上一朋友告诉我,用char **arr = (char *)malloc( sizeof(char *)*n);觉得可以试试,正在尝试,等有结果了告诉你哦。
点评回复

使用道具 举报

发表于 2010-9-27 23:33:49 | 显示全部楼层
哈哈,看来楼主是用习惯java了,其对象方法确实够齐全,在C上这些大部分都需要自行实现
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-11-24 13:57 , Processed in 0.045955 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表