C语言中字符串切割函数split的实现(急!!!)

科技岁月 2010-09-27 02:26:10
在项目开发中,遇到要处理字符串,但是字符串的处理没有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];
这样的限制就无法实现动态智能分配相应的字符串数组了。
求各位高手帮帮忙,小弟感谢了。











...全文
1680 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
科技岁月 2010-09-28
  • 打赏
  • 举报
回复
按照这个想法,结果实现了,真的可以啊。谢谢了。不过代码为:
char **arry;
arry = (char **)malloc(sizeof(char*)*n);
结果是,无论多少个分组我都不用去手动分配,可以自动分配了。[Quote=引用 5 楼 justkk 的回复:]
char **arry;
arry = (char *)malloc(sizeof(char *) * n);
[/Quote]
科技岁月 2010-09-28
  • 打赏
  • 举报
回复
按照这个想法,结果实现了,真的可以啊。谢谢了。不过代码为:
char **arry;
arry = (char **)malloc(sizeof(char*)*n);
结果是,无论多少个分组我都不用去手动分配,可以自动分配了。
[Quote=引用 4 楼 dr1103 的回复:]
我之前想的是,现在可以知道能分成n个字符串数组,然后据此分配n个arr指针数组,这样不就有个一一对应关系了么?但是问题是,指针数组必须是在我获得n这个值之前系统开辟的,有没有一种解决办法,能实现正好开辟下表为n的指针数组char *arry[n],其中n=strsplinum(str,del);
[/Quote]
科技岁月 2010-09-28
  • 打赏
  • 举报
回复
谢谢各位的大力支持,小弟受教了!尤其是五楼、六楼的帮忙,现在去做个实验去,高手啊!万分涕零!
Thirty 2010-09-27
  • 打赏
  • 举报
回复
没时间看,,,支持一下
赵4老师 2010-09-27
  • 打赏
  • 举报
回复
strtok
wesleyluo 2010-09-27
  • 打赏
  • 举报
回复
楼上说的是啊。
cheng_fengming 2010-09-27
  • 打赏
  • 举报
回复
其实c语言里面有很多函数都可以方便的处理字符号串,如上面用到的strtok,还有memchar
最近同事用了一个sscanf来截取字符串,我发现它和 正则表达式结合确实很强大,可以学学。
justkk 2010-09-27
  • 打赏
  • 举报
回复
char **arry;
arry = (char *)malloc(sizeof(char *) * n);
科技岁月 2010-09-27
  • 打赏
  • 举报
回复
我之前想的是,现在可以知道能分成n个字符串数组,然后据此分配n个arr指针数组,这样不就有个一一对应关系了么?但是问题是,指针数组必须是在我获得n这个值之前系统开辟的,有没有一种解决办法,能实现正好开辟下表为n的指针数组char *arry[n],其中n=strsplinum(str,del);
bobo364 2010-09-27
  • 打赏
  • 举报
回复
这代码已经实现了一些功能了,你说的自动malloc生成字符串貌似在c里很难实现
#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;
}
justkk 2010-09-27
  • 打赏
  • 举报
回复
lz的功能是不是已经实现了?
计算数目,然后分配空间,再提取数据..

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧