青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

唐吉訶德

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  5 Posts :: 75 Stories :: 3 Comments :: 0 Trackbacks

常用鏈接

留言簿(2)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

這里有些sscanf()的一些使用說明,都是從論壇,Blog里整理出來的。供大家使用。
   通過學習和使用個人認為,在字符串格式不是很復雜,但是也并不簡單的時候用這個函數比較合適,這個尺度就要靠自己把握了,字符串不是很復雜,但自己寫個處理的函數比較麻煩,效率也不高,就用這個函數,如果字符串很復雜,那就用正則表達式吧。
不多說了,看看下面這些介紹和列子吧!
名稱:sscanf() - 從一個字符串中讀進與指定格式相符的數據.
函數原型:
Int  sscanf( string str, string fmt, mixed var1, mixed var2 ... );
int  scanf( const char *format [,argument]... );
說明:
sscanf與scanf類似,都是用于輸入的,只是后者以屏幕(stdin)為輸入源,前者以固定字符串為輸入源。
其中的format可以是一個或多個 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符號}
支持集合操作:
     %[a-z] 表示匹配a到z中任意字符,貪婪性(盡可能多的匹配)
     %[aB'] 匹配a、B、'中一員,貪婪性
     %[^a] 匹配非a的任意字符,貪婪性
例子:
1. 常見用法。
    char buf[512] = {0};
    sscanf("123456 ", "%s", buf);
    printf("%s\n", buf);
結果為:123456
2. 取指定長度的字符串。如在下例中,取最大長度為4字節的字符串。
    sscanf("123456 ", "%4s", buf);
    printf("%s\n", buf);
結果為:1234
3. 取到指定字符為止的字符串。如在下例中,取遇到空格為止字符串。
    sscanf("123456 abcdedf", "%[^ ]", buf);
    printf("%s\n", buf);
結果為:123456
 
4.  取僅包含指定字符集的字符串。如在下例中,取僅包含1到9和小寫字母的字符串。
    sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
    printf("%s\n", buf);
結果為:123456abcdedf
 
5.  取到指定字符集為止的字符串。如在下例中,取遇到大寫字母為止的字符串。
    sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);
    printf("%s\n", buf);
結果為:123456abcdedf
6、給定一個字符串iios/12DDWDFF@122,獲取 / 和 @ 之間的字符串,先將 "iios/"過濾掉,再將非'@'的一串內容送到buf中
    sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);
    printf("%s\n", buf);
結果為:12DDWDFF
 
7、給定一個字符串““hello, world”,僅保留world。(注意:“,”之后有一空格)
    sscanf(“hello, world”,  "%*s%s",  buf);  
    printf("%s\n", buf);
結果為:world
%*s表示第一個匹配到的%s被過濾掉,即hello被過濾了
如果沒有空格則結果為NULL。
8、
 char *s="1try234delete5" 
則:
sscanf(s, "1%[^2]234%[^5]", s1, s2);
scanf的format中出現的非轉換字符(%之前或轉換字符之后的字符),即此例中的1234用來跳過輸入中的相應字符;
‘[]’的含義與正則表達式中相同,表示匹配其中出現的字符序列;^表示相反。使用[ ]時接收輸入的變量必須是有足夠存儲空間的char、signed char、unsigned char數組。記住[也是轉換字符,所以沒有s了。
8、分割以某字符標記的字符串。
 char test[]="222,333,444,,,555,666";
 char s1[4],s2[4],s3[4],s4[4],s5[4],s6[4],s7[4];
 sscanf(test,"%[^,],%[^,],%[^,],%[^,],%[^,],%[^,],%[^,]",s1,s2,s3,s4,s5,s6,s7);
 printf("sssa1=%s",s1);
 printf("sssa2=%s",s2);
 printf("sssa3=%s",s3);
 printf("sssa4=%s",s4);
 printf("sssa5=%s",s5);
 printf("sssa6=%s",s6);
 printf("sssa7=%s",s7);
9、一個提取用戶個人資料中郵件地址的例子
#include<cstdlib>
#include<cstdio>
using namespace std;
int main()
{
    char a[20]={0};
    char b[20]={0};
    //假設email地址信息以';'結束
    sscanf("email:jimmywhr@gmail.com;","%*[^:]:%[^;]",a);
    //假設email地址信息沒有特定的結束標志
    sscanf("email:jimmywhr@gmail.com","%*[^:]:%s",b);
    printf("%s\n",a);
    printf("%s\n",b);
    system("pause");
    return 0;
}
  關鍵是"%*[^:]:%[^;]"和"%*[^:]:%s"這兩個參數的問題
  %*[^:]    表示滿足"[]"里的條件將被過濾掉,不會向目標參數中寫入值。這里的意思是在
            第一個':'之前的字符會在寫入時過濾掉,'^'是表示否定的意思,整個參數翻譯
            成白話就是:將在遇到第一個':'之前的(不為':'的)字符全部過濾掉。
  :         自然就是跳過':'的意思。
  %[^;]     拷貝字符直到遇到';'。
一下摘自:http://blog.csdn.net/lbird/archive/2007/08/03/1724429.aspx
%[ ] 的用法:%[ ]表示要讀入一個字符集合, 如果[ 后面第一個字符是”^”,則表示反意思。
                     [ ]內的字符串可以是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個字符
       The run-time
 library does not automatically append a null terminator
 to the string, nor does reading 40 characters
 automatically terminate the scanf() function. Because the
 library uses buffered input, you must press the ENTER key
 to terminate the string scan. If you press the ENTER before
 the scanf() reads 40 characters, it is displayed normally,
 and the library continues to prompt for additional input
 until it reads 40 characters

%[^=]     讀取字符串直到碰到’=’號,’^’后面可以帶更多字符,如:
              char s[]="notepad=1.0.0.1001" ;
       char szfilename [32] = "" ;
       int i = sscanf( s, "%[^=]", szfilename ) ; // szfilename=notepad     
       如果參數格式是:%[^=:] ,那么也可以從 notepad:1.0.0.1001讀取notepad
             
使用例子:
 char s[]="notepad=1.0.0.1001" ;
 char szname [32] = "" ;
 char szver [32] = “” ;
sscanf( s, "%[^=]=%s", szname , szver ) ; // szname=notepad, szver=1.0.0.1001
總結:%[]有很大的功能,但是并不是很常用到,主要因為:
1、許多系統的 scanf 函數都有漏洞. (典型的就是 TC 在輸入浮點型時有時會出錯).
2、用法復雜, 容易出錯.
3、編譯器作語法分析時會很困難, 從而影響目標代碼的質量和執行效率.
個人覺得第3點最致命,越復雜的功能往往執行效率越低下。而一些簡單的字符串分析我們可以自已處理。

以前只是簡單是使用sscanf,卻沒發現其還有如此強大的功能
 char str0[100],str1[100],str2[100],str3[100];

 sscanf("abcde abc 123 aaa","%s %s %s %s",str0,str1,str2,str3);
 結果:str0="abcde"   str1="abc"  str2 = "123" str3="aaa"

 sscanf("abcde abc 123 aaa","abc%s %s %*d %s",str0,str1,str3);
 結果:str0="abcde"   str1="abc"  str3="aaa"

 sscanf("abc123 efg456","%4s",str0);
 結果:str0="abc1"   

 sscanf("abc123 efg456a4","%[a-z 1-5]",str0);
 結果:str0="abc123 efg45"   

sscanf("abc123 efg456a4","%[a-z1-5]",str0);
 結果:str0="abc123" 

 sscanf("ABCTabcZ123 efg456","%[A-P]",str0);
 結果:str0="ABC"   

 sscanf("abc 12345","%[^ ]",str0);
 結果:str0="abc"   

 sscanf("abc 12345","%[^4]",str0);
 結果:str0="abc 123"   

 sscanf("fdaBs 52aB1asdf","%[^4-0]",str0);
 結果:str0="fdaBs 5"   

 sscanf("abc 12345","%[^ ]%[^3]",str0,str1);
 結果:str0="abc"    str1="12"

 sscanf("abc301abc2345","%*[^9-0]%s",str0); 
 結果:str0="301abc2345"   
 sscanf("bca@123efg4@5abc","%*[^@]@%[^@]",str0);
 結果:str0="123efg4"   

posted on 2010-04-25 10:47 心羽 閱讀(3780) 評論(1)  編輯 收藏 引用 所屬分類: VC/MFC

Feedback

# re: sscanf()的一些使用說明 2014-03-13 17:56 wewea
謝謝  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲影院在线观看| 欧美成人精品1314www| 亚洲日本一区二区| 韩国亚洲精品| 国产日韩欧美视频| 国产一区二区三区久久悠悠色av | 99视频在线观看一区三区| 一区二区三区.www| 中日韩视频在线观看| 亚洲一区二区黄| 欧美专区中文字幕| 久久成人人人人精品欧| 久久久水蜜桃| 男人的天堂亚洲| 欧美成人亚洲| 国产精品入口福利| 国产精品一区视频| 18成人免费观看视频| 一区二区三区欧美在线| 欧美一区午夜精品| 国产精品国产成人国产三级| 欧美视频一区二区三区四区| 国产性天天综合网| 亚洲人被黑人高潮完整版| 亚洲香蕉在线观看| 噜噜噜在线观看免费视频日韩| 亚洲精品国产精品乱码不99按摩 | 久久久亚洲人| 亚洲国产日韩美| 午夜视频一区在线观看| 久久在线免费观看视频| 国产精品夜夜夜一区二区三区尤| 亚洲国产91精品在线观看| 久久嫩草精品久久久精品一| 欧美日韩播放| 欲色影视综合吧| 久久国产精品久久国产精品| 亚洲激情在线观看视频免费| 久久精品国产亚洲aⅴ| 国产精品高潮呻吟久久av无限| 亚洲成色777777女色窝| 欧美一级理论性理论a| 亚洲精选在线| 蜜桃av综合| 国产一区二区三区网站 | 久久精品国产免费看久久精品| 亚洲国产另类精品专区| 久久精品国产综合| 国产欧美日韩视频一区二区三区 | 欧美一二三视频| 亚洲国产福利在线| 欧美综合国产| 国产亚洲精品久久久| 99精品免费| 欧美激情久久久久| 久久综合狠狠综合久久综合88| 国产欧美日韩精品专区| 午夜亚洲福利| 亚洲免费黄色| 欧美成年人网站| 欧美在线1区| 国产亚洲精品aa午夜观看| 亚洲欧美成人精品| 亚洲一二三区精品| 国产精品美女主播在线观看纯欲| 欧美激情视频在线播放 | 久久精品视频网| 亚洲一区二区三区中文字幕在线| 欧美日韩大片一区二区三区| 日韩午夜精品| 一区二区三区日韩精品视频| 欧美亚洲视频| 小嫩嫩精品导航| 国产精品午夜春色av| 新片速递亚洲合集欧美合集| 亚洲欧美一区二区视频| 欧美日韩精品二区第二页| 久久综合五月天婷婷伊人| ●精品国产综合乱码久久久久| 免费观看日韩av| 男女精品网站| 最近中文字幕mv在线一区二区三区四区| 欧美成人中文字幕在线| 欧美黄色一级视频| 亚洲免费在线视频一区 二区| 亚洲欧美一区二区三区极速播放| 极品日韩久久| 亚洲乱码精品一二三四区日韩在线| 欧美电影打屁股sp| 午夜一区二区三区在线观看 | 欧美女同在线视频| 午夜精品久久久| 久久精品国产免费| 一区二区三区高清在线| 亚洲午夜av| 亚洲电影观看| 亚洲天堂久久| 亚洲欧洲日韩在线| 亚洲一二三级电影| 亚洲日本国产| 欧美亚洲日本国产| 亚洲伦理久久| 亚洲女与黑人做爰| 亚洲人成啪啪网站| 欧美一级免费视频| 亚洲日韩视频| 欧美一级淫片aaaaaaa视频| 91久久精品国产| 性8sex亚洲区入口| 一区二区三欧美| 久久天堂国产精品| 亚洲女人天堂成人av在线| 久久精品1区| 羞羞视频在线观看欧美| 欧美高清视频在线观看| 久久久久久免费| 国产精品成人午夜| 亚洲成色精品| 亚洲午夜精品国产| 亚洲日本va午夜在线电影| 久久精品国产99国产精品| 午夜免费在线观看精品视频| 欧美精品久久99久久在免费线| 老色鬼精品视频在线观看播放| 国产精品一区在线播放| 亚洲最新中文字幕| 亚洲伦伦在线| 欧美激情va永久在线播放| 老司机亚洲精品| 国语精品中文字幕| 亚洲视频一区在线观看| 一区二区三区www| 欧美精品久久99| 蜜臀久久99精品久久久久久9| 国产精品乱人伦一区二区| 欧美一级理论性理论a| 欧美啪啪成人vr| 久久久视频精品| 国产美女扒开尿口久久久| 亚洲欧洲美洲综合色网| 在线电影欧美日韩一区二区私密| 小辣椒精品导航| 久久露脸国产精品| 韩日欧美一区二区| 久久国产精品网站| 久久亚洲一区二区| 一区二区三区在线免费观看| 久久精品国亚洲| 香蕉久久a毛片| 国产欧美日韩另类视频免费观看 | 亚洲欧美日韩精品久久奇米色影视| 欧美精品v国产精品v日韩精品| 亚洲黄色成人网| 一区二区国产在线观看| 欧美午夜欧美| 午夜欧美电影在线观看| 久久嫩草精品久久久久| 国产精品区二区三区日本| 亚洲欧美日韩另类精品一区二区三区| 性伦欧美刺激片在线观看| 国产在线一区二区三区四区| 久久视频在线看| 亚洲伦理一区| 久久精品99国产精品| 亚洲国产成人精品视频| 欧美国产在线视频| 亚洲永久网站| 欧美福利电影网| 亚洲视频在线视频| 韩国一区二区三区在线观看 | 亚洲精品日韩精品| 亚洲视频一起| 国产一区二区三区网站| 欧美成人午夜剧场免费观看| 91久久久精品| 久久久久免费视频| 一区二区电影免费观看| 国产精品一区二区久久国产| 久久久蜜桃精品| 一区二区三区日韩精品| 久久精品成人一区二区三区| 亚洲日本成人| 激情国产一区| 国产精品入口| 亚洲激情第一区| 欧美精品999| 久久精品一区二区三区中文字幕 | 国产欧美日韩中文字幕在线| 香蕉成人啪国产精品视频综合网| 久久久亚洲高清| 亚洲伊人伊色伊影伊综合网| 久久精品一区二区三区四区| 亚洲国产精品久久久久秋霞影院 | 欧美精品日韩综合在线| 小黄鸭精品密入口导航| 99精品久久久| 夜夜爽夜夜爽精品视频| 国产欧美日韩视频| 亚洲欧美久久| 亚洲图片欧美午夜|