一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Linux下字符串解析的一些方法

 紫火神兵 2015-06-25
    在linux下編程時(shí),有時(shí)候我們需要獲取shell命令的執(zhí)行結(jié)果,一種比較笨的方法是將shell命令的執(zhí)行結(jié)果保存到文件,然后在讀文件,讀完之后,再刪除文件,或者使用臨時(shí)文件也行。這種方法比較繁瑣,我推薦的一種方法是使用popen函數(shù),F(xiàn)ILE *popen(const char *command, const char *type),比如我要獲取ls -l的結(jié)果,我們可以這樣做
  1. FILE *stream;

  2. if((stream = popen("ls -l"), r) == NULL)
  3. {
  4.     perror("popen");
  5.     exit(1);
  6. }

  7. char buf[256];

  8. while(fgets(buf, 256, stream) != NULL)
  9. {
  10.     ...
  11. }

  12. pclose(stream);
   這樣就獲取了每一行的數(shù)據(jù)
在獲取了這些數(shù)據(jù)之后,我們有時(shí)候需要對(duì)這些數(shù)據(jù)進(jìn)行解析,比如從這些字符數(shù)據(jù)中讀出某些數(shù)據(jù),這時(shí)候 strstr,strchr,strrchr,sscanf這些函數(shù)就很有用了。
 (1) char* strstr(char* str, char* substr);
strstr函數(shù)返回str中第一次出現(xiàn)substr的指針.
    比如有這樣一個(gè)字符串 str = "TotalMem:1800 FreeMem:800  swapMem:500"
    你想讀出FreeMem的值,你就可以這樣做
    char *p = strstr(str, "FreeMem:");
    int freeMem;
    sscanf(p+ strlen("FreeMem:"), "%d", &freeMem);
這里用到了sscanf,下面再講.
 (2) char *strchr(char *s,char c);
strchr函數(shù)返回字符串s中首次出現(xiàn)字符c的指針,
  char *s="We are Chinese!";
  char *p;
  p = strchr(s, 'C')
 (3) char *strrchr(char *str, char c);
  strrchr函數(shù)返回字符串str從右面算起首次出現(xiàn)字符c的指針,比如我們要從一個(gè)路徑字符串中解析出文件的名字
   char *path = "/home/liming/123.txt"
   char *fileName = strrchr(path, '/') + 1;

(4) int sscanf(const char *buffer,const char *format[,argument ]...);
 sscanf 可以從字符buffer中讀進(jìn)與指定格式相符的數(shù)據(jù),這樣在字符串解析式就非常有用
 1.比如:
   char *str = "Jan 18 2006";
   你要將年月日分割出來,就可以這樣
   int day;
   int year;
   char month[4];
   sscanf(str, "%s %d %d", month, &day, &year);
 2.非常方便,又比如
   char *str = "Jan 02 02:02:02 2000"
   你要將數(shù)據(jù)分離出來
   int year;
   char month[4];
   int day;
   int hour;
   int min;
   int sec;
   sscanf(str, "%s %2d %2d:%2d:%2d %d", month, &day, &hour, &min, &sec, &year);
 3.sscanf不一定一空格為分隔符,比如一個(gè)字符串一逗號(hào)‘,’分割數(shù)據(jù)時(shí)
   char *str = "werwe,124,455,23234";
   char buf[10];
   int a1,a2,a3;
   sscanf(str, "%[^,],%d,%d,%d", buf, &a1,&a2,&a3);
   [^,]表示遇到字符‘,’時(shí)結(jié)束
 4.有時(shí)候我們不一定要讀所有的數(shù)據(jù),可能會(huì)跳過一些數(shù)據(jù),這時(shí)可以用%*
   char *str = "hi 124 iu  233.3 34"
   如果我們只需讀第四和第五個(gè)數(shù)據(jù)時(shí)
   double a4;
   int a5;
   sscanf(str, "%*s %*d %*s %f %d", &a4, &a5);
   %*表示略過

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产亚洲精品久久久优势| 欧美乱视频一区二区三区| 麻豆印象传媒在线观看| 欧美午夜国产在线观看| 色婷婷中文字幕在线视频| 国产精品日韩精品一区| 亚洲欧美中文字幕精品| 欧美日韩亚洲精品在线观看| 久久99爱爱视频视频| 一区二区日韩欧美精品| 国产小青蛙全集免费看| 国产精品白丝久久av| 国产水滴盗摄一区二区| 欧美精品女同一区二区| 日本精品最新字幕视频播放| 欧美一级片日韩一级片| 日韩亚洲精品国产第二页| 国产日韩欧美在线播放| 日韩高清中文字幕亚洲| 日韩欧美国产精品自拍| 搡老妇女老熟女一区二区| 国产精品一区二区视频| 污污黄黄的成年亚洲毛片| 欧美亚洲美女资源国产| 色哟哟国产精品免费视频| 日韩欧美第一页在线观看| 国产午夜福利在线观看精品| 国产日韩欧美国产欧美日韩 | 天海翼高清二区三区在线| 色丁香一区二区黑人巨大| 日韩一级欧美一级久久| 亚洲永久一区二区三区在线| 欧美成人精品国产成人综合| 富婆又大又白又丰满又紧又硬| 亚洲五月婷婷中文字幕| 丰满人妻一二三区av| 少妇人妻无一区二区三区| 五月婷婷亚洲综合一区| 五月综合激情婷婷丁香| 伊人国产精选免费观看在线视频| 美女黄片大全在线观看|