表頭檔案 #include(stdio.h)
定義函式 int sscanf (const char *str,const char * format,........);
函式說明 sscanf()會將引數str的字串根據引數format字串來轉換並格式化資料。格式轉換形式請參考scanf()。轉換後的結果存於對應的引數內。
返回值 成功則返回引數數目,失敗則返回-1,錯誤原因存於errno中。
周星星的**:
#include
int main(
)結果為:12ddwdff
sscanf與scanf類似,都是用於輸入的,只是後者以螢幕(
stdin
)為輸入源,前者以固定字串為輸入源。
函式原型:
int scanf( const char *format [,argument]... );
其中的format可以是乙個或多個 ]type | ' ' | '/t' | '/n' | 非%符號},
注:表示a,b,c中選一,[d],表示可以有d也可以沒有d。
width:寬度,一般可以忽略,用法如:
const char sourcestr = "hello, world";
char buf[10] = ;
sscanf(sourcestr, "%5s", buf); //%5s,只取5個字元
cout << buf<< endl;
結果為:hello
:引數的size,通常h表示單位元組size,i表示2位元組 size,l表示4位元組size(double例外),l64表示8位元組size。
type :這就很多了,就是%s,%d之類。
特別的:
%*[width] type 表示滿足該條件的被過濾掉,不會向目標引數中寫入值。如:
const char sourcestr = "hello, world";
char buf[10] = ;
sscanf(sourcestr, "%*s%s", buf); //%*s表示第乙個匹配到的%s被過濾掉,即hello被過濾了
cout << buf<< endl;
結果為:world
支援集合操作:
%[a-z] 表示匹配a到z中任意字元,貪婪性(盡可能多的匹配)
%[ab'] 匹配a、b、'中一員,貪婪性
%[^a] 匹配非a的任意字元,貪婪性
1. 常見用法。
以下是引用片段:
charstr[512]=;
sscanf(
"123456"
,"%s"
,str)
;printf(
"str=%s
",str)
;2. 取指定長度的字串。如在下例中,取最大長度為4位元組的字串。
以下是引用片段:
sscanf(
"123456"
,"%4s"
,str)
;printf(
"str=%s
",str)
;3. 取到指定字元為止的字串。如在下例中,取遇到空格為止字串。
以下是引用片段:
sscanf(
"123456abcdedf"
,"%[^]"
,str)
;printf(
"str=%s
",str)
;4. 取僅包含指定字符集的字串。如在下例中,取僅包含1到9和小寫字母的字串。
以下是引用片段:
sscanf(
"123456abcdedfbcdef"
,"%[1-9a-z]"
,str)
;printf(
"str=%s
",str)
;5. 取到指定字符集為止的字串。如在下例中,取遇到大寫字母為止的字串。
以下是引用片段:
sscanf(
"123456abcdedfbcdef"
,"%[^a-z]"
,str)
;printf(
"str=%s"
,str)
;
蒐集一些特殊用法:
%
的用法:%
表示要讀入乙個字元集合, 如果[ 後面第乙個字元是」^」,則表示反意思。
內的字串可以是1或更多字元組成。空字符集(%
)是違反規定的,可
導致不可預知的結果。%[^
]也是違反規定的。
%[a-z] 讀取在 a-z 之間的字串,如果不在此之前則停止,如
char s=
"hello, my friend」 ; // 注意: ,逗號在不 a-z之間
sscanf( s, 「%[a-z]」, string ) ; // string=hello
%[^a-z] 讀取不在 a-z 之間的字串,如果碰到a-z之間的字元則停止,如
char s="hellokitty」 ;
// 注意: ,逗號在不 a-z之間
sscanf
( s, 「%
[^a-z]」,
string);
// string=hello%*
[^=] 前面帶 * 號表示不儲存變數。跳過符合條件的字串。
char s=
"notepad=1.0.0.1001"
;char szfilename [32]=""
;int i =
sscanf
( s,
"%*[^=]"
, szfilename )
;
// szfilename=null,因為沒儲存
int i =
sscanf
( s,
"%*[^=]=%s"
, szfilename )
;
// szfilename=1.0.0.1001
%40c 讀取40個字元%[
^=] 讀取字串直到碰到』=』號,』^』後面可以帶更多字元,如:
char s=
"notepad=1.0.0.1001"
;char szfilename [32]=""
;int i =
sscanf
( s,
"%[^=]"
, szfilename )
;
// szfilename=notepad
如果引數格式是:%[^
=:] ,那麼也可以從 notepad:1.0.0.1001讀取notepad
參考:http://blog.csdn.net/beingstudio/articles/1806661.aspx
sscanf用法以及正規表示式的運用
表頭檔案 include stdio.h 定義函式 int sscanf const char str,const char format,函式說明 sscanf 會將引數str的字串根據引數format字串來轉換並格式化資料。格式轉換形式請參考scanf 轉換後的結果存於對應的引數內。返回值 成功...
sscanf正規表示式用法簡介
其實sscanf中的篩選條件並不是嚴格意義上的正規表示式,只能說是正規表示式的簡化版本,直接套用正規表示式可能出錯。比如 正規表示式中星號 問號?加號 分別表示匹配 0 1個 1 n m個字元,而sscanf中預設匹配任意多個滿足條件的字元,直到遇到不滿足條件的字元 即相當於預設只有正規表示式星號 ...
sscanf正規表示式
c語言 sscanf正規表示式 2011 01 07 00 18 表頭檔案 include stdio.h 定義函式 int sscanf const char str,const char format,函式說明 sscanf 會將引數str的字串根據引數format字串來轉換並格式化資料。格式轉...