c语言中字符串分割函数及实现方法

时间:2021-05-02

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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #include <stdio.h> #include<string.h> #define MAX_LEN 128 void main() { int i,length,ct=0,start = -1; char inputBuffer[MAX_LEN],*args[MAX_LEN]; strcpy(inputBuffer,"mv a.c b.c"); length=strlen(inputBuffer); for (i = 0; i <= length; i++) { switch (inputBuffer[i]){ case ' ': case '\t' : if(start != -1){ args[ct] = &inputBuffer[start]; ct++; } inputBuffer[i] = '\0'; start = -1; break; case '\0': if (start != -1){ args[ct] = &inputBuffer[start]; ct++; } inputBuffer[i] = '\0'; args[ct] = NULL; break; default : if (start == -1) start = i; } } printf("分解之后的字符串为:\n"); for(i=0;i<ct;i++) printf("%s \n",args[i]); }

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

具体示例如下:

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> #include<string.h> int main() { char str[] = "mv a.c b.c"; char *p; p = strtok(str, " "); while(p) { printf("%s\n", p); p = strtok(NULL, " "); } return 0; }

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

具体示例如下:

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

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

以上这篇c语言中字符串分割函数及实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章