找回密码
 注册
搜索
查看: 1099|回复: 3

C语言中字符串切割函数split

[复制链接]
发表于 2010-9-27 14:29:51 | 显示全部楼层 |阅读模式
在项目开发中,遇到要处理字符串,但是字符串的处理没有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 16:19:51 | 显示全部楼层
1. 你这个实现只是做了索引而且没有长度信息,后面基本不可用了。
2. 指针数组arr?这个难倒不能动态分配?定义一个char** pp_first_list; 就好了,根据返回个数再动态分配
3. 如果需要复制子串信息,那字串的ram也需要动态分配,如果不需要那么还得建立一个int *p_length_list数组。
---
另外也可以考虑复制一个字符串,然后在遍历过程中直接将分隔符修改成结束符‘\0’,这样int *p_length_list就不用了
点评回复

使用道具 举报

 楼主| 发表于 2010-9-30 12:43:19 | 显示全部楼层
还是没有人回复啊
点评回复

使用道具 举报

 楼主| 发表于 2010-9-28 09:01:41 | 显示全部楼层
看来没人理我,网站也不怎么火啊,真没CSDN的效率高,高手多啊。
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

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

GMT+8, 2024-10-7 23:22 , Processed in 0.049832 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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