C語言中的sscanf 函式使用詳解

2022-10-04 03:48:08 字數 4797 閱讀 2975

sscanf() - 從乙個字串中讀進與指定格式相符的資料.

函式原型:

int sscanf( string str, string fmt, mixed var1, mixed var2 ... );

int scanf( const char *format [,argument]... );

說明:sscanf與scanf類似,都是用於輸入的,只是後者以螢幕(stdin)為輸入源,前者以固定字串為輸入源。

其中的format可以是乙個或多個 ]type | ' ' | '\t' | '\n' | 非%符號}

注:1、 * 亦可用於格式中, (即 %*d 和 %*s) 加了星號 (*) 表示跳過此資料不讀入. (也就是不把此資料讀入引數中)

2、表示a,b,c中選一,[d],表示可以有d也可以沒有d。

3、width表示讀取寬度。

4、:引數的size,通常h表示單位元組size,i表示2位元組 size,l表示4位元組size(double例外),l64表示8位元組size。

5、type :這就很多了,就是%s,%d之類。

6、特別的:%*[width] type 表示滿足該條件的被過濾掉,不會向目標引數中寫入值

支援集合操作:

%[a-z] 表示匹配a到z中任意字元,貪婪性(盡可能多的匹配)

%[ab'] 匹配a、b、'中一員,貪婪性

%[^a] 匹配非a的任意字元,貪婪性

format格式

]type | ' ' | t' | '\n' | 非%符號}

注:    *可用於格式中,(即%*d和%*s)加了星號(*)表示跳過此資料不讀入。(也就是不把資料讀入到引數中)

width表示讀取寬度

:引數size,通常h表示單位元組size,l表示2位元組size,l表示4位元組size,l64表示8位元組size

type引數型別,例如%s,%d

支援正規表示式,例如%[a-z]匹配a到z中任意字元(ps:正規表示式這個假期我會寫一篇部落格記錄)

參考用例

#include

#include

#include

int main()

九度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

#include

#include

struct mission

;

int compare(const void *p, const void *q);

int main()

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 ++)

return 0;

}

int compare(const void *p, const void *q)

else if(a->runtime == b->runtime && a->year > b->year)

else if(a->runtime == b->runtime && a->year == b->year && a->month > b->month)

else if(a->runtime == b->runtime && a->year == b->year && a->month == b->month && a->day > b->day)

else if(a->runtime == b->runtime && a->year == b->year && a->month == b->month && a->day == b->day && a->hour > b->hour)

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)

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)

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)

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)

else

} 本文標題: c語言中的sscanf()函式使用詳解

本文位址: /ruanjian/c/129774.html

C語言中sscanf 用法

int sscanf const char const char int sscanf const char buffer,const char format,argument buffer儲存的資料 format格式控制字串 argument選擇性設定字串 sscanf會從buffer裡讀進資料,...

C語言中 sscanf 的用法

sscanf 從乙個字串中讀入,指定格式的資料,並存入對應的引數列表中.返回值 失敗 1 成功 格式化引數的數目.str 待讀入的字串,特定的字串 fmt 格式化方式 var1 var2 引數列表 intsscanf string str,string fmt,mixed var1,mixed va...

C語言中sscanf函式的簡明教程

int sscanf const char str,const char format,sscanf 定義於標頭檔案stdio.h。sscanf 會將引數str的字串根據引數format字串來轉換並格式化資料。格式轉換形式請參考scanf 轉換後的結果存於對應的引數內。成功則返回引數數目,失敗則返回...