表頭檔案 #include(stdio.h )
定義函式 int sscanf (const char *str,const char * format,........);
函式說明 sscanf()會將引數str的字串根據引數format字串來轉換並格式化資料。格式轉換形式請參考scanf()。轉換後的結果存於對應的引數內。
返回值 成功則返回引數數目,失敗則返回-1,錯誤原因存於errno中。
#
include
< stdio. h>
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
正規表示式與正則語言
正規表示式和正則語言是一致的。但能不能用正規表示式識別,是需要分析的。比如0與1一樣多的01串,是否可以識別?根據幫浦引理是不可以的,所以如果想通過正規表示式來處理,那將是歧途。01與10一樣多的,是可以識別的。因為通過分析後,可以知道01與10無論如何他們的個數不會差別超過1.所以可以據此構造有限...
正則集與正規表示式辨析
歸納 定義正規表示式的運算和正則集的運算的對映關係 a b cup ab 的元素和的元素分別連線 現在有正規表示式w1,w2,根據基礎,分別有map w1 集合t1,map w2 集合t2。對w1和w2進行有限次運算,即operation w1,w2 根據歸納,有map operation oper...
正規表示式與python
在python中有乙個非常重要也非常好用的模組re,在import re後,就能夠在python中使用正規表示式,源於此次專案要用正規表示式對html 提取一定的字元,所以在這也就用些小例子來熟悉一下正規表示式 現在就用最簡單的例子 print re.findall r 執行後結果為 這個相對來說還...