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...