关于字符串分割函数

emoshusheng 2011-04-02 10:04:11
现在在一家公司实习培训,培训老师出了一道题,要求自己写一个函数实现字符串的分割。他说,strtok()函数有缺陷。比如一字符串为:||123|456||78||,分隔符为:|。要是用strtok(),则分割成3个字串分别为:123 456 78。但是按老师的意思应该是8个字串,第一个为空,第二个为空,第三个为123,第四个为456,第五个为空,第六个为78,第七个为空,第八个为空。如果分隔符换为:||,那分割出的字串个数为4个。他说分隔符两边要是没有字符那就是空,也应该被分割出来。
不知道大家看懂了没,这个程序我已经写好了。我发这个帖子的目的是告诉大家调用封装好的函数很方便,但是也不可盲目。多想想封装好的函数是不是很合理。
如果大家看懂了,不妨试着自己动手编写程序,调试一下吧。
...全文
136 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2011-04-04
  • 打赏
  • 举报
回复
你老师没向 ISO 写信?
qq120848369 2011-04-02
  • 打赏
  • 举报
回复
|||
空 空 空 空
总共: 4 段
qq120848369 2011-04-02
  • 打赏
  • 举报
回复
1
1总共: 1 段
2
2总共: 1 段
123
123总共: 1 段
123||||
123 空 空 空 空
总共: 5 段
|||123a|1|3||41|
空 空 空 123a 1 3 空 41 空
总共: 9 段

qq120848369 2011-04-02
  • 打赏
  • 举报
回复
||123|456||78||
空 空 123 456 空 78 空 空
总共: 8 段

#include <stdio.h>
#include <stdlib.h>

char* find(char *str)
{
while(*str!=0 && *str!='|')
{
++str;
}

return str;
}

int function(char *str)
{
char *begin=str-1,*end=find(str);
int count=1;

while(*end!=0)
{
if(end==begin+1)
{
printf("空 ");
}
else
{
*end=0;
printf("%s ",begin+1);
}

begin=end;
end=find(begin+1);
++count;
}

if(end==begin+1)
{
printf("空 \n");
}
else
{
printf("%s",begin+1);
}

return count;
}


int main()
{
char buffer[100];

while(scanf("%s",buffer)!=EOF)
{
printf("总共: %d 段",function(buffer));
}

return 0;
}

masmaster 2011-04-02
  • 打赏
  • 举报
回复
感谢楼主。 分享代码。
hhh_hao 2011-04-02
  • 打赏
  • 举报
回复
用已有的函数当然要知道它的作用, 能用封装的尽量用, 即减少了代码量, 又提高了阅读性...

69,378

社区成员

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

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