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

唐吉訶德

  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>
            国产精品第三页| 这里是久久伊人| 亚洲永久免费| 99热这里只有精品8| 亚洲精品在线看| 一区二区三区视频在线| 亚洲一区免费| 久久久综合香蕉尹人综合网| 美女精品网站| 亚洲国产视频一区| 亚洲另类在线一区| 亚洲欧美中文另类| 久久婷婷国产综合尤物精品| 男女视频一区二区| 欧美色另类天堂2015| 国产一区二区三区视频在线观看| 激情av一区二区| 日韩一级大片在线| 欧美在现视频| 亚洲片国产一区一级在线观看| 99av国产精品欲麻豆| 欧美影院一区| 欧美日韩在线视频一区| 伊人久久大香线| 亚洲一区二区四区| 免费成人高清在线视频| 一本一本久久a久久精品综合麻豆| 亚洲欧美在线x视频| 欧美激情在线有限公司| 国产午夜精品美女毛片视频| 一区二区欧美日韩| 欧美r片在线| 亚洲欧美在线一区二区| 欧美激情麻豆| 一区免费在线| 欧美一区二粉嫩精品国产一线天| 亚洲激情另类| 久久久不卡网国产精品一区| 欧美亚州在线观看| 亚洲日本无吗高清不卡| 久久婷婷成人综合色| 亚洲一区免费在线观看| 欧美日韩精品一区二区三区| 亚洲国产另类精品专区| 久久综合导航| 久久成人精品| 黄色国产精品| 久久免费视频这里只有精品| 亚洲视频在线播放| 欧美日韩中文字幕在线视频| 夜夜狂射影院欧美极品| 久久久久国内| 欧美激情亚洲自拍| 久久久蜜桃一区二区人| 国产日本欧美视频| 欧美一区二区三区在线看| 亚洲午夜三级在线| 国产精品国产成人国产三级| 一本大道久久精品懂色aⅴ| 亚洲国产成人精品女人久久久| 久久久久国产精品麻豆ai换脸| 国产精品色一区二区三区| 亚洲欧洲av一区二区| 亚洲视频一区二区| 国产麻豆9l精品三级站| 久久精品国产亚洲a| 久久精品国产久精国产爱| 黄色av一区| 亚洲第一区在线观看| 你懂的国产精品| 99成人在线| 在线午夜精品自拍| 国产日韩在线亚洲字幕中文| 久久久噜久噜久久综合| 久久欧美中文字幕| 亚洲日韩第九十九页| 亚洲茄子视频| 国产精品男人爽免费视频1| 欧美一区二区三区免费看| 欧美一级午夜免费电影| 激情一区二区三区| 欧美国产日本| 欧美日韩亚洲一区二区三区在线观看 | 国产精品v欧美精品v日本精品动漫| 亚洲图片欧美日产| 亚洲欧美一区二区三区极速播放 | 欧美激情免费在线| 欧美色图五月天| 久久狠狠亚洲综合| 另类酷文…触手系列精品集v1小说| 亚洲高清免费视频| 日韩一二三在线视频播| 国产一区二区三区免费不卡| 亚洲电影免费观看高清完整版| 欧美午夜一区二区福利视频| 久久精品五月| 欧美日韩在线亚洲一区蜜芽| 久久另类ts人妖一区二区| 欧美极品一区| 久久久噜噜噜久久久| 欧美精品一区二区三区久久久竹菊 | 欧美.www| 国产欧美精品日韩区二区麻豆天美 | 午夜电影亚洲| 日韩午夜在线| 欧美专区第一页| 一区二区三区产品免费精品久久75| 亚洲欧美激情在线视频| 91久久国产精品91久久性色| 亚洲午夜精品| 亚洲免费大片| 久久色在线观看| 久久经典综合| 国产精品v欧美精品v日韩| 亚洲国产精品高清久久久| 激情六月婷婷综合| 午夜日韩在线| 欧美一区二区三区男人的天堂| 欧美日韩另类视频| 亚洲第一久久影院| 亚洲国产成人一区| 性色一区二区三区| 午夜久久久久久| 欧美午夜精品| 一本到12不卡视频在线dvd| 亚洲精品美女在线观看| 久久青草久久| 卡一卡二国产精品| 伊人成人网在线看| 久久精品伊人| 久久男人资源视频| 国产一区二区日韩精品欧美精品| 亚洲小视频在线| 亚洲欧美日韩成人| 国产精品天美传媒入口| 午夜国产精品视频| 久久久久久综合| 极品尤物av久久免费看| 久久久久久噜噜噜久久久精品| 久久米奇亚洲| 亚洲第一主播视频| 欧美成人午夜| 日韩天天综合| 亚洲欧美一区在线| 国内精品久久久久影院色| 久久久久久亚洲综合影院红桃| 免费成人黄色| aⅴ色国产欧美| 国产精品豆花视频| 欧美影视一区| 亚洲国产cao| 亚洲一区成人| 国产精品素人视频| 久久久久九九九| 亚洲第一主播视频| 亚洲在线观看| 激情另类综合| 欧美精品18+| 亚洲性感激情| 免播放器亚洲一区| 一区二区三区视频在线播放| 国产精品美女999| 久久久久久亚洲综合影院红桃| 亚洲黄网站在线观看| 亚洲一区影音先锋| 国产在线播精品第三| 狂野欧美激情性xxxx欧美| 亚洲美女诱惑| 久久婷婷国产综合精品青草| 99国产精品一区| 一本色道精品久久一区二区三区| 欧美成熟视频| 亚洲精品1区2区| 欧美成人精品| 亚洲欧美国产精品桃花| 女人天堂亚洲aⅴ在线观看| 国产欧美一区二区三区在线老狼 | 欧美巨乳在线观看| 伊人久久av导航| 久久综合成人精品亚洲另类欧美| 亚洲电影av| 久久国产夜色精品鲁鲁99| 黄色成人在线网址| 欧美午夜精品久久久久久浪潮| 欧美在线视频免费播放| 亚洲韩国日本中文字幕| 久久成人av少妇免费| 99精品欧美一区二区三区| 狠狠v欧美v日韩v亚洲ⅴ| 欧美日韩一区二区三区四区在线观看| 欧美在线视频免费| 亚洲私人黄色宅男| 欧美激情一区二区三区不卡| 欧美一二区视频| 一本色道久久综合亚洲精品高清| 国产亚洲美州欧州综合国| 欧美日韩在线精品一区二区三区| 久久五月天婷婷| 欧美怡红院视频| 亚洲欧美中文另类|