c說話中字符串朋分函數及完成辦法。本站提示廣大學習愛好者:(c說話中字符串朋分函數及完成辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是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三個字符串。
詳細完成以下:
#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、功課提交後又查詢了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說話中字符串朋分函數及完成辦法就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。