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

唐吉訶德

  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 心羽 閱讀(3794) 評論(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>
            欧美一区二区福利在线| 麻豆乱码国产一区二区三区| 欧美一区2区视频在线观看 | 亚洲黄一区二区| 亚洲午夜日本在线观看| 亚洲精品国产精品乱码不99| 亚洲四色影视在线观看| 一本色道久久综合狠狠躁的推荐| 久久精品青青大伊人av| 亚洲欧美一区二区精品久久久| 欧美大片在线观看| 免费欧美在线| 亚洲第一色在线| 欧美在线观看网址综合| 欧美在线视频不卡| 国产精品久久一卡二卡| 99视频在线观看一区三区| 亚洲精品久久久久久久久久久| 久久久www| 美国十次了思思久久精品导航| 国内成人精品一区| 欧美中文字幕在线| 久久久久久久久久久久久女国产乱| 国产精品蜜臀在线观看| 亚洲视频专区在线| 欧美一区二区高清在线观看| 国产精品视频xxx| 亚洲宅男天堂在线观看无病毒| 亚洲欧美高清| 国产精品自拍三区| 欧美中文字幕视频在线观看| 久久久噜噜噜久久狠狠50岁| 韩曰欧美视频免费观看| 久久久久久久综合狠狠综合| 欧美1区视频| 亚洲欧洲一区二区在线播放| 欧美激情麻豆| 日韩亚洲不卡在线| 午夜在线视频一区二区区别| 国产欧美日韩亚洲| 久久久99爱| 亚洲激情欧美| 亚洲一区二区三区在线观看视频| 国产精品伦一区| 欧美在线观看www| 欧美大片va欧美在线播放| 亚洲精品国产日韩| 欧美天堂亚洲电影院在线播放 | 猛干欧美女孩| 亚洲欧洲日产国产网站| 午夜精品久久久久久久男人的天堂| 国产婷婷色一区二区三区| 久久久福利视频| 日韩网站在线观看| 久久精品国产亚洲高清剧情介绍| 在线观看不卡av| 欧美日韩一区综合| 久久av一区二区三区| 亚洲国产日韩在线一区模特| 亚洲一区二区三| 狠狠色丁香婷婷综合久久片| 欧美成人一区二免费视频软件| 99精品福利视频| 另类欧美日韩国产在线| 亚洲最新视频在线播放| 国产日韩欧美精品| 欧美激情第8页| 久久av资源网| 一本到12不卡视频在线dvd| 欧美在线亚洲在线| 日韩视频不卡| 激情综合电影网| 国产精品日韩高清| 欧美精品大片| 久久久久久网| 午夜精品视频在线观看| 亚洲高清免费视频| 久久乐国产精品| 亚洲欧美中日韩| 99在线热播精品免费99热| 红桃视频欧美| 国产日韩高清一区二区三区在线| 欧美大胆成人| 久久综合精品一区| 午夜精品视频在线观看一区二区| 99在线热播精品免费| 欧美激情亚洲另类| 美女福利精品视频| 久久久精品性| 久久精品九九| 久久精品国产77777蜜臀| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 亚洲中字在线| 99精品国产高清一区二区| 亚洲高清av| 激情婷婷久久| 精品91免费| 一区二区在线观看视频| 国产一区二区三区在线播放免费观看| 国产精品激情av在线播放| 欧美日韩国产综合视频在线观看中文| 欧美成熟视频| 欧美伦理一区二区| 欧美绝品在线观看成人午夜影视| 久久亚洲欧美| 欧美gay视频| 欧美福利电影网| 欧美精品123区| 欧美喷潮久久久xxxxx| 欧美精品在线免费播放| 欧美精品色综合| 欧美日韩国产综合视频在线| 欧美日韩另类丝袜其他| 欧美日韩亚洲天堂| 国产精品sss| 国产精品亚洲综合一区在线观看 | 国产一区二区精品在线观看| 国产精品手机视频| 国产亚洲一二三区| 在线观看91精品国产麻豆| 亚洲国产精品久久精品怡红院 | 午夜宅男久久久| 久久精品亚洲热| 欧美二区在线观看| 亚洲精品免费看| 亚洲午夜电影网| 久久精品国产一区二区三区| 久久综合久色欧美综合狠狠| 欧美精品在线视频| 国产精品午夜av在线| 激情偷拍久久| 一区二区三区福利| 久久久.com| 亚洲国产一区二区三区在线播| 亚洲美女色禁图| 欧美一级二区| 欧美另类69精品久久久久9999| 欧美丝袜一区二区三区| 狠狠色狠狠色综合| 99国产一区| 久久一区亚洲| 亚洲精品一区二区在线观看| 亚洲综合三区| 欧美华人在线视频| 国产欧美日本一区二区三区| 亚洲高清精品中出| 亚洲一级高清| 欧美成人xxx| 亚洲视频在线观看免费| 久久久久久午夜| 国产精品v欧美精品v日韩| 激情婷婷久久| 午夜欧美视频| 亚洲国产成人高清精品| 午夜精品久久久久久久99水蜜桃| 欧美国产另类| 红杏aⅴ成人免费视频| 亚洲综合导航| 亚洲第一色在线| 久久成人亚洲| 国产精品美女久久久久久久| 亚洲人成7777| 另类av导航| 午夜精品免费| 欧美亚洲第一区| 一区二区高清在线观看| 欧美大秀在线观看| 欧美自拍偷拍午夜视频| 国产精品成人免费| 一本到12不卡视频在线dvd| 久久综合导航| 久久国产精品99国产精| 国产精品久久午夜| 亚洲一区二区动漫| 亚洲片国产一区一级在线观看| 久久夜色撩人精品| 韩日午夜在线资源一区二区| 欧美影院在线| 性亚洲最疯狂xxxx高清| 国产精品久久久| 亚洲一区二区三区涩| 亚洲精品一区二区三| 欧美成人在线免费观看| 亚洲国产精品嫩草影院| 快播亚洲色图| 久久国产精品亚洲va麻豆| 国产午夜精品一区理论片飘花| 午夜免费电影一区在线观看| 一区二区三区高清在线| 国产精品www.| 欧美一区二区三区四区高清| 亚洲一区二区三区777| 国产精品国产三级国产普通话蜜臀 | 亚洲成人中文| 蜜臀va亚洲va欧美va天堂| 久久精品国内一区二区三区| 国产精品色婷婷| 久久不射中文字幕| 性高湖久久久久久久久| 国语自产精品视频在线看抢先版结局 |