sscanf和sprintf函式的用法

2021-08-07 13:52:14 字數 4060 閱讀 8736

sscanf和sprintf是scanf和printf家族的一對成員,用於處理和分析字串非常強大的兩個函式。

標頭檔案 stdio.h

原型[cpp]view plain

copy

intsscanf(  

const

char

*buffer,  

const

char

*format,  

...  

);  

intsprintf(  

char

*buffer,  

const

char

*format,  

...  

);  

功能:類似於scanf和printf 但從字串*buffer用於輸入輸出 

1.sprintf用於格式化字串

把變數列印到字串中,從而獲得數字的字元形式,這樣不需要手工轉換。

例如char c[100];

int k=255;

sprintf(c,"%d",k);

//c包含"255"

2.sprintf用於進製轉換

可以方便地得到變數的十六進製制和八進位制字串行,再稍加處理即可得到每一位的值。

char c[100];

int k=255;

sprintf(c,"%x",k);

//c包含"ff" c[0]='f' c[1]='f'

3.sprintf用於連線字串

方便地連線兩個或者多個字串

char buf[1024];

char a[100]="i ";

char b[100]="love ";

char c[100]="acm."

sprintf(buf,"%s%s%s",a,b,c);

//buf 包含"i love acm."

4.sscanf用於處理輸入

有些比較麻煩的輸入輸出用sscanf處理將會非常方便

如hrbeu1002 (這裡給出的不是完整**,其中輸出部分只是簡單地原樣列印出來。)

因為scanf在使用除了%c以外的格式時都忽略換行符'/n',題中用空行來區分不同case的要求

顯得難以處理,如果使用sscanf的話,可以先把輸入用scanf存入一塊緩衝區當中,再用sscanf讀取

這樣大大減少了工作量。

[cpp]view plain

copy

#include 

intt[100];  

intp[100];  

inti;  

bool

input()  

p++;   

}  return

0;  

}  void

output()  

printf("/n"

);  

}  int

main()    

5.sscanf用於分析字串

sscanf可以支援格式字元% 這為分析字串提供了很大方便(其實scanf也支援%)

先看一下% 格式:

(1)-: 表示範圍,如:%[1-9]表示只讀取1-9這幾個數字 %[a-z]表示只讀取a-z小寫字母,類似地 %[a-z]只讀取大寫字母

(2)^: 表示不取,如:%[^1]表示讀取除'1'以外的所有字元 %[^/]表示除/以外的所有字元

(3),: 範圍可以用","相連線 如%[1-9,a-z]表示同時取1-9數字和a-z小寫字母 

(4)原則:從第乙個在指定範圍內的數字開始讀取,到第乙個不在範圍內的數字結束%s 可以看成% 的乙個特例 %[^ ](注意^後面有乙個空格!)

這樣使用sscanf+%可以輕鬆的分析字串,很多字串問題便迎刃而解了。

以hrbeu3001為例(不是完整**,沒有要求的格式)

只需2個sscanf函式,就能完成題目的要求,**非常簡潔。

[cpp]view plain

copy

#include 

intmain(

intargc, 

char

*argv)  

return

0;  

}   

sscanf用法幾例

devicetype的值,首先原始字串中是否包含devicetype=,如果包含此串兒則使用如下方式獲得devicetype的值。

例1:

[cpp]view plain

copy

#include 

intmain(

intargc, 

char

argv)  

}  }  

例2:請自己比較兩段**執行結果有何不同。

[cpp]view plain

copy

#include 

#include 

using

namespace

std;  

intmain(

intargc, 

char

* argv)  

#include 

#include 

using

namespace

std;  

intmain(

intargc, 

char

* argv)    

例3:還是讓執行結果說話。

[cpp]view plain

copy

#include 

#include 

using

namespace

std;  

intmain(

intargc, 

char

* argv)  

;           

sscanf(szmsg.c_str(), "%[0-9]"

, szid);  

cout << szid << endl;  

return

0;  

}  

sscanf是乙個很好用的函式,利用它可以從字串中取出整數、浮點數和字串等等。它的使用方法簡單,特別對於整數和浮點數來說。但新手可能並不知道處理字串時的一些高階用法,這裡做個簡要說明吧。

1. 常見用法。

以下是引用片段:

char str[512] = ; 

sscanf("123456 ", "%s", str); 

printf("str=%s/n", str);

2. 取指定長度的字串。如在下例中,取最大長度為4位元組的字串。

以下是引用片段:

sscanf("123456 ", "%4s", str); 

printf("str=%s/n", str);

3. 取到指定字元為止的字串。如在下例中,取遇到空格為止字串。

以下是引用片段:

sscanf("123456 abcdedf", "%[^ ]", str); 

printf("str=%s/n", str);

4. 取僅包含指定字符集的字串。如在下例中,取僅包含1到9和小寫字母的字串。

以下是引用片段:

sscanf("123456abcdedfbcdef", "%[1-9a-z]", str); 

printf("str=%s/n", str);

5. 取到指定字符集為止的字串。如在下例中,取遇到大寫字母為止的字串。

以下是引用片段:

sscanf("123456abcdedfbcdef", "%[^a-z]", str); 

printf("str=%s/n", str);

sscanf 和 sprintf的用法

一 sprintf sprint函式原型為int sprintf char str,const char format,作用是格式化字串,具體功能如下所示 1 將數字變數轉換為字串。2 得到整型變數的 16進製制和 8進製字串。3 連線多個字串。舉例如下 char str 256 int data ...

sscanf和sprintf的用法

標準庫函式定義 函式在任何平台上都被支援 且保證函式功能一致 基本一致 使得你的同乙個原始碼,在windows編譯執行的結果 和在linux上編譯執行的結果相同。sprintf與sscanf 實際工程中常用的一對函式 sprintf 格式化字串,首字母s表示string sscanf 解析字串 例 ...

sprintf和sscanf的用法

1 sprintf 跟printf 在用法上幾乎一樣,只是列印的目的地不同而已,前者列印到字串中,後者則直接在命令列上輸出。這也導致sprintf 比printf 有用得多。sprintf 是個變參函式,定義如下 int sprintf char buffer,const char format a...