sscanf用法以及正規表示式的運用

2021-05-24 12:08:40 字數 3663 閱讀 8393

表頭檔案 #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字串來轉換並格式化資料。格式轉...