日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
sscanf函數(shù)和正則表達(dá)式是什么

本篇文章給大家分享的是有關(guān)sscanf函數(shù)和正則表達(dá)式是什么,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

創(chuàng)新互聯(lián)建站主營巴楚網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶App定制開發(fā),巴楚h5小程序定制開發(fā)搭建,巴楚網(wǎng)站營銷推廣歡迎巴楚等地區(qū)企業(yè)咨詢

此文所有的實驗都是基于下面的程序:

char str[10];

for (int i = 0; i < 10; i++) str[i] = '!';

執(zhí)行完后str的值為

str = "!!!!!!!!!!"

我們把str的每個字符都初始化為驚嘆號,當(dāng)str的值發(fā)生變化時,使用printf打印str的值,對比先前的驚嘆號,這樣就可以方便的觀察str發(fā)生了怎樣的變化。下面我們做幾個小實驗,看看使用sscanf和正則表達(dá)式格式化輸入后,str有什么變化。

實驗1:

sscanf(
"123456"
,
"%s"
,
str)
; ---------str的值為 "123456/0!!!"

這個實驗很簡單,把源字符串"123456"拷貝到str的前6個字符,并且把str的第7個字符設(shè)為null字符,也就是/0

實驗2:

sscanf(
"123456"
,
"%3s"
,
str)
; ---------str的值為 "123/0!!!!!!"

看到?jīng)]有,正則表達(dá)式的百分號后面多了一個3,這告訴sscanf只拷貝3個字符給str,然后把第4個字符設(shè)為null字符。

實驗3:

sscanf(
"aaaAAA"
,
"%[a-z]"
,
str)
; ---------str的值為 "aaa/0!!!!!!"

從這個實驗開始我們會使用正則表達(dá)式,括號里面的a-z就是一個正則表達(dá)式,它可以表示從a到z的任意字符,


繼續(xù)討論之前,我們先來看看百分號表示什么意思,%表示選擇

,%后面的是條件,比如實驗1的"%s",s是一個條件,表示任意字符,"%s"的意思是:只
要輸入的東西是一個字符,就把它拷貝給str。實驗2的"%3s"又多了一個條件:只拷貝3個字符。實驗3的“%[a-z]”的條件稍微嚴(yán)格一些,輸入的
東西不但是字符,還得是一個小寫字母的字符,所以實驗3只拷貝了小寫字母"aaa"給str,別忘了加上null字符。

實驗4:

sscanf(
"AAAaaaBBB"
,
"%[^a-z]"
,
str)
; ---------str的值為 "AAA/0!!!!!!"


于所有字符,只要不是小寫字母,都滿足"^a-z"正則表達(dá)式,符號^表示邏輯非。前3個字符都不是小寫字符,所以將其拷貝給str,但最后3個字符也不
是小寫字母,為什么不拷貝給str呢?這是因為當(dāng)碰到不滿足條件的字符后,sscanf就會停止執(zhí)行,不再掃描之后的字符。

實驗5:

sscanf(
"AAAaaaBBB"
,
"%[A-Z]%[a-z]"
,
str)
; ---------段錯誤


個實驗的本意是:先把大寫字母拷貝給str,然后把小寫字母拷貝給str,但很不幸,程序運行的時候會發(fā)生段錯誤,因為當(dāng)sscanf掃描到字符a時,違
反了條件"%[A-Z]",sscanf就停止執(zhí)行,不再掃描之后的字符,所以第二個條件也就沒有任何意義,這個實驗說明:不能使用%號兩次或兩次以上

實驗6:

sscanf(
"AAAaaaBBB"
,
"%*[A-Z]%[a-z]"
,
str)
; ---------str的值為 "aaa/0!!!!!!"


個實驗出現(xiàn)了一個新的符號:%*,與%相反,%*表示過濾

滿足條件的字符,在這個實驗中,%*[A-Z]過濾了所有大寫字母,然后再使用%[a-z]把之
后的小寫字母拷貝給str。如果只有%*,沒有%的話,sscanf不會拷貝任何字符到str,這時sscanf的作用僅僅是過濾字符串。

實驗7:

sscanf(
"AAAaaaBBB"
,
"%[a-z]"
,
str)
; ---------str的值為 "!!!!!!!!!!"

做完前面幾個實驗后,我們都知道sscanf拷貝完成后,還會在str的后面加上一個null字符,但如果沒有一個字符滿足條件,sscanf不會在str的后面加null字符,str的值依然是10個驚嘆號。這個實驗也說明了,如果不使用%*過濾掉前面不需要的字符,你永遠(yuǎn)別想取得中間的字符。

實驗8:

sscanf(
"AAAaaaBC="
,
"%*[A-Z]%*[a-z]%[^a-z=]"
,
str)
; ---------str的值為 "BC/0!!!!!!!"

這是一個綜合實驗,但這個實驗的目的不是幫我們復(fù)習(xí)前面所學(xué)的知識,而是展示兩個值得注意的地方:

注意1:%只能使用一次,但%*可以使用多次,比如在這個實驗里面,先用%*[A-Z]過濾大寫字母,然后用%*[a-z]過濾小寫字母。

注意2:^后面可以帶多個條件,且這些條件都受^的作用,比如^a-z=表示^a-z且^=(既不是小寫字母,也不是等于號)。

實驗9:

int k;

sscanf(
"AAA123BBB456"
,
"%*[^0-9]%i"
,
&k)
; ---------k的值為123

首先,%*[^0-9]過濾前面非數(shù)字的字符,然后用%i把數(shù)字字符轉(zhuǎn)換成int型的整數(shù),拷貝到變量k,注意參數(shù)必須使用k的地址。

以上就是sscanf函數(shù)和正則表達(dá)式是什么,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


文章名稱:sscanf函數(shù)和正則表達(dá)式是什么
文章來源:http://www.dlmjj.cn/article/jdiioj.html