分割字符串c语言strsep,c语言中分割字符串

1、问题引入

自己在写一个linux下的模拟执行指令的时候,遇到了输入"cat a.c”,要将该字符串分解成cat和a.c两个单独的字符串,虽然知道有strtok的存在,但是想自己尝试写一下,于是就自己写了一个,不过总是遇到这样或那样的问题,虽然最后调通了,不过确浪费了不少时间;后来作业交上去以后又仔细阅读了strtok函数,发现原来linux下已经改成strsep,所有在这里就写一下自己所走的过程。

2、自己写的字符串分割函数:用于分割指令,比如cat a.c最后会被分割成cat和a.c两个字符串、mv a.c b.c最后会被分割成mv和a.c和b.c三个字符串。

具体实现如下:

1 #include 2 #include3 #define MAX_LEN 1284 voidmain()5 {6 int i,length,ct=0,start = -1;7 char inputBuffer[MAX_LEN],*args[MAX_LEN];8 strcpy(inputBuffer,"mv a.c b.c");9 length=strlen(inputBuffer);10 for (i = 0; i <= length; i++) {11 switch(inputBuffer[i]){12 case ' ':13 case '\t' : /*argument separators*/ 14 if(start != -1){15 args[ct] = &inputBuffer[start]; /*set up pointer*/ 16 ct++;17 }18 inputBuffer[i] = '\0'; /*add a null char; make a C string*/ 19 start = -1;20 break;21 case '\0': /*should be the final char examined*/ 22 if (start != -1){23 args[ct] = &inputBuffer[start];24 ct++;25 }26 inputBuffer[i] = '\0';27 args[ct] = NULL; /*no more arguments to this command*/ 28 break;29 default : /*some other character*/ 30 if (start == -1)31 start =i;32 }33 }34 printf("分解之后的字符串为:\n");35 for(i=0;i

1a45673fad32aae6387f1353a6a3a11c.png

3、作业提交后又查询了strtok,发现使用strtok函数会方便很多

具体示例如下:

#include #includeintmain()

{char str[] = "mv a.c b.c";char *p;

p= strtok(str, " ");while(p)

{

printf("%s\n", p);

p= strtok(NULL, " ");

}return 0;

}

1a45673fad32aae6387f1353a6a3a11c.png

4、在linux2.6.29以后的版本中,strtok被strsep代替了。

具体示例如下:

1 #include 2 #include3 intmain()4 {5 char str[] = "mv a.c b.c";6 char *p;7 char *buff;8 buff=str;9 p = strsep(&buff, " ");10 while(p)11 {12 printf("%s\n", p);13 p = strsep(&buff, " ");14 }15 return 0;16 }

1a45673fad32aae6387f1353a6a3a11c.png

而且在我自己的电脑的linux中的codeblog下,运行4中代码需要0.029s,而运行3中的代码需要0.044s,说明strsep速度确实比strtok快一些,,

转载自:http://www.cnblogs.com/lpshou/archive/2012/06/04/2534376.html。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值