程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話中的sscanf()函數應用詳解

C說話中的sscanf()函數應用詳解

編輯:關於C++

C說話中的sscanf()函數應用詳解。本站提示廣大學習愛好者:(C說話中的sscanf()函數應用詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話中的sscanf()函數應用詳解正文


sscanf() - 從一個字符串中讀進與指定格局符合的數據.
  函數原型:

  Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );
  int scanf( const char *format [,argument]... );

  解釋:
  sscanf與scanf相似,都是用於輸出的,只是後者以屏幕(stdin)為輸出源,前者以固定字符串為輸出源。
  個中的format可所以一個或多個 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符號}
  注:
  1、 * 亦可用於格局中, (即 %*d 和 %*s) 加了星號 (*) 表現跳過此數據不讀入. (也就是不把此數據讀入參數中)
  2、{a|b|c}表現a,b,c當選一,[d],表現可以有d也能夠沒有d。
  3、width表現讀取寬度。
  4、{h | l | I64 | L}:參數的size,平日h表現單字節size,I表現2字節 size,L表現4字節size(double破例),l64表現8字節size。
  5、type :這就許多了,就是%s,%d之類。
  6、特殊的:%*[width] [{h | l | I64 | L}]type 表現知足該前提的被過濾失落,不會向目的參數中寫入值
  支撐聚集操作:
  %[a-z] 表現婚配a到z中隨意率性字符,貪心性(盡量多的婚配)
  %[aB'] 婚配a、B、'中一員,貪心性
  %[^a] 婚配非a的隨意率性字符,貪心性


format格局

 {%[*] [width][{h | l | l64 | L}]type | ' ' | t' | '\n' | 非%符號} 


注:

    *可用於格局中,(即%*d和%*s)加了星號(*)表現跳過此數據不讀入。(也就是不把數據讀入到參數中)
    width表現讀取寬度
    {h | l | l64 | L}:參數size,平日h表現單字節size,l表現2字節size,L表現4字節size,l64表現8字節size
    type參數類型,例如%s,%d
    支撐正則表達式,例如%[a-z]婚配a到z中隨意率性字符(ps:正則表達式這個假期我會寫一篇博客記載)

參考用例

   

 #include <stdio.h> 
 #include <stdlib.h> 
 #include <string.h> 
  
  
 int main() 
 { 
  int result; 
  char str[100]; 
  char buf1[255], buf2[255], buf3[255], buf4[255]; 
   
  //根本用法 
  memset(str, 0, sizeof(str)); 
  strcpy(str, "i love china!"); 
  result = sscanf(str, "%s %s %s", buf1, buf2, buf3); 
  printf("%d\n%s\n%s\n%s\n", result, buf1, buf2, buf3); 
  /** 
   * 履行成果: 
   * 3 
   * i 
   * love 
   * china! 
   * 可以看出,sscanf的前往值為讀取的參數個數 
   */ 
  
  //讀取指定長度的字符串 
  memset(str, 0, sizeof(str)); 
  strcpy(str, "abcdefghijklmnopq"); 
  sscanf(str, "%5s", buf4); 
  printf("%s\n", buf4); 
  /** 
   * 履行成果: 
   * abcde 
   */ 
  
  //正則婚配字符串 
  memset(str, 0, sizeof(str)); 
  memset(buf1, 0, sizeof(buf1)); 
  memset(buf2, 0, sizeof(buf2)); 
  memset(buf3, 0, sizeof(buf3)); 
  strcpy(str, "123456abcdedfANDFS"); 
  sscanf(str, "%[0-9]%[a-z]%[A-Z]", buf1, buf2, buf3); 
  printf("%s\n%s\n%s\n", buf1, buf2, buf3); 
  /** 
   * 履行成果: 
   * 123456 
   * abcdedf 
   * ANDFS 
   * 很難信任c說話居然支撐正則,不外c支撐的正則挺弱的 
   */ 
  return 0; 
 } 


九度ac標題
標題描寫

    標題描寫: 
    有一個收集日記,記載了收集上鉤算義務的履行情形,每一個盤算義務對應一條以下情勢的日記記載: 
    “hs_10000_p”是盤算義務的稱號, 
    “2007-01-17 19:22:53,315”是盤算義務開端履行的時光“年-月-日 時:分:秒,毫秒”,  
    “253.035(s)”是盤算義務消費的時光(以秒計) 
    hs_10000_p 2007-01-17 19:22:53,315 253.035(s) 
    請你寫一個法式,對日記中記載盤算義務停止排序。 
    時光消費少的盤算義務排在後面,時光消費多的盤算義務排在前面。 
    假如兩個盤算義務消費的時光雷同,則將開端履行時光早的盤算義務排在後面。 
    輸出: 
    日記中每一個記載是一個字符串,每一個字符串占一行。最初一行動空行,表現日記停止。日記中最多能夠有10000筆記錄。 
    盤算義務稱號的長度不跨越10,開端履行時光的格局是YYYY-MM-DD HH:MM:SS,MMM,消費時光小數點後有三位數字。 
    盤算義務稱號與義務開端時光、消費時光之間以一個或多個空格離隔,行首和行尾能夠有過剩的空格。 
    輸入: 
    排序好的日記記載。每一個記載的字符串各占一行。 
    輸出的格局與輸出堅持分歧,輸出包含幾個空格,你的輸入中也應當包括異樣多的空格。 
    樣例輸出: 
    hs_10000_p   2007-01-17 19:22:53,315     253.035(s) 
    hs_10001_p   2007-01-17 19:22:53,315     253.846(s) 
    hs_10002_m   2007-01-17 19:22:53,315     129.574(s) 
    hs_10002_p   2007-01-17 19:22:53,315     262.531(s) 
    hs_10003_m   2007-01-17 19:22:53,318     126.622(s) 
    hs_10003_p   2007-01-17 19:22:53,318     136.962(s) 
    hs_10005_m   2007-01-17 19:22:53,318     130.487(s) 
    hs_10005_p   2007-01-17 19:22:53,318     253.035(s) 
    hs_10006_m   2007-01-17 19:22:53,318     248.548(s) 
    hs_10006_p   2007-01-17 19:25:23,367    3146.827(s) 
    樣例輸入: 
    hs_10003_m   2007-01-17 19:22:53,318     126.622(s) 
    hs_10002_m   2007-01-17 19:22:53,315     129.574(s) 
    hs_10005_m   2007-01-17 19:22:53,318     130.487(s) 
    hs_10003_p   2007-01-17 19:22:53,318     136.962(s) 
    hs_10006_m   2007-01-17 19:22:53,318     248.548(s) 
    hs_10000_p   2007-01-17 19:22:53,315     253.035(s) 
    hs_10005_p   2007-01-17 19:22:53,318     253.035(s) 
    hs_10001_p   2007-01-17 19:22:53,315     253.846(s) 
    hs_10002_p   2007-01-17 19:22:53,315     262.531(s) 
    hs_10006_p   2007-01-17 19:25:23,367    3146.827(s) 


ac代碼

  

 #include <stdio.h> 
 #include <stdlib.h> 
 #include <string.h> 
  
 struct mission 
 { 
  char str[200]; 
  char name[20]; 
  int year, month, day, hour, minute, second, micro; 
  double runtime; 
 }; 
  
 int compare(const void *p, const void *q); 
  
 int main() 
 { 
  struct mission mis[10001]; 
  int i, n = 0; 
  memset(mis, 0, sizeof(mis)); 
  while(gets(mis[n].str)) 
  { 
   if(strcmp(mis[n].str, "") == 0) 
   { 
    break; 
   } 
   sscanf(mis[n].str, "%s%d-%d-%d %d:%d:%d,%d %lf", mis[n].name, &mis[n].year, &mis[n].month, &mis[n].day, &mis[n].hour, &mis[n].minute, &mis[n].second, &mis[n].micro, &mis[n].runtime); 
   n ++; 
  } 
  
  qsort(mis, n, sizeof(mis[0]), compare); 
  
  
  for(i = 0; i < n; i ++) 
  { 
   printf("%s\n", mis[i].str); 
  } 
  
  return 0; 
 } 
  
 int compare(const void *p, const void *q) 
 { 
  const struct mission *a = p; 
  const struct mission *b = q; 
  
  if(a->runtime > b->runtime) 
  { 
   return 1; 
  }else if(a->runtime == b->runtime && a->year > b->year) 
  { 
   return 1; 
  }else if(a->runtime == b->runtime && a->year == b->year && a->month > b->month) 
  { 
   return 1; 
  }else if(a->runtime == b->runtime && a->year == b->year && a->month == b->month && a->day > b->day) 
  { 
   return 1; 
  }else if(a->runtime == b->runtime && a->year == b->year && a->month == b->month && a->day == b->day && a->hour > b->hour) 
  { 
   return 1; 
  }else if(a->runtime == b->runtime && a->year == b->year && a->month == b->month && a->day == b->day && a->hour == b->hour && a->minute > b->minute) 
  { 
   return 1; 
  }else if(a->runtime == b->runtime && a->year == b->year && a->month == b->month && a->day == b->day && a->hour == b->hour && a->minute == b->minute && a->second > b->second) 
  { 
   return 1; 
  }else if(a->runtime == b->runtime && a->year == b->year && a->month == b->month && a->day == b->day && a->hour == b->hour && a->minute == b->minute && a->second == b->second && a->micro > b->micro) 
  { 
   return 1; 
  }else if(a->runtime == b->runtime && a->year == b->year && a->month == b->month && a->day == b->day && a->hour == b->hour && a->minute == b->minute && a->second > b->second && a->micro == b->micro) 
  { 
   return 0; 
  } 
  else 
  { 
   return -1; 
  } 
 } 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved