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三個字符串。
具體實現如下:
#include <stdio.h>#include<string.h>#define MAX_LEN 128void 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' : /* argument separators */ if(start != -1){ args[ct] = &inputBuffer[start]; /* set up pointer */ ct++; } inputBuffer[i] = '/0'; /* add a null char; make a C string */ start = -1; break; case '/0': /* should be the final char examined */ if (start != -1){ args[ct] = &inputBuffer[start]; ct++; } inputBuffer[i] = '/0'; args[ct] = NULL; /* no more arguments to this command */ break; default : /* some other character */ if (start == -1) start = i; } } printf("分解之后的字符串為:/n"); for(i=0;i<ct;i++) printf("%s /n",args[i]);}3、作業提交后又查詢了strtok,發現使用strtok函數會方便很多
具體示例如下:
#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代替了。
具體示例如下:
#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語言中字符串分割函數及實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。
新聞熱點
疑難解答
圖片精選