国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C > 正文

c語言中字符串分割函數及實現方法

2020-01-26 14:34:59
字體:
來源:轉載
供稿:網友

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語言中字符串分割函數及實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 泽库县| 正蓝旗| 托克托县| 镇远县| 什邡市| 平乡县| 新平| 淅川县| 淮阳县| 张家港市| 乌兰察布市| 黄陵县| 满洲里市| 固阳县| 巨野县| 兰考县| 开阳县| 河北区| 湖州市| 普洱| 潞西市| 汶上县| 泰安市| 白河县| 黎川县| 岚皋县| 荣成市| 平度市| 惠东县| 绵阳市| 稻城县| 香格里拉县| 商丘市| 桂东县| 十堰市| 陵水| 陆丰市| 大姚县| 瑞昌市| 秀山| 基隆市|