c語言中字符串分割函數(shù)及實現(xiàn)方法
1、問題引入
自己在寫一個linux下的模擬執(zhí)行指令的時候,遇到了輸入"cat a.c”,要將該字符串分解成cat和a.c兩個單獨的字符串,雖然知道有strtok的存在,但是想自己嘗試寫一下,于是就自己寫了一個,不過總是遇到這樣或那樣的問題,雖然最后調(diào)通了,不過確浪費了不少時間;后來作業(yè)交上去以后又仔細閱讀了strtok函數(shù),發(fā)現(xiàn)原來linux下已經(jīng)改成strsep,所有在這里就寫一下自己所走的過程。
2、自己寫的字符串分割函數(shù):用于分割指令,比如cat a.c最后會被分割成cat和a.c兩個字符串、mv a.c b.c最后會被分割成mv和a.c和b.c三個字符串。
具體實現(xiàn)如下:
#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' : /* 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、作業(yè)提交后又查詢了strtok,發(fā)現(xiàn)使用strtok函數(shù)會方便很多
具體示例如下:
#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語言中字符串分割函數(shù)及實現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
C語言實現(xiàn)簡易通訊錄(靜態(tài)版本)的代碼分享
這篇文章主要為大家詳細介紹了如何錄音C語言實現(xiàn)一個簡易的通訊錄(靜態(tài)版本),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-10-10詳解VS2019+OpenCV-4-1-0+OpenCV-contrib-4-1-0
這篇文章主要介紹了詳解VS2019+OpenCV-4-1-0+OpenCV-contrib-4-1-0,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04C語言 詳細分析結(jié)構(gòu)體的內(nèi)存對齊
C 數(shù)組允許定義可存儲相同類型數(shù)據(jù)項的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲不同類型的數(shù)據(jù)項,本篇讓我們來了解C 的結(jié)構(gòu)體內(nèi)存對齊2022-03-03visual studio 2019工具里添加開發(fā)中命令提示符的方法
這篇文章主要介紹了visual studio 2019工具里添加開發(fā)中命令提示符的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03