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

唐吉訶德

  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区45| 久久久久久久91| 欧美资源在线| 在线观看精品| 亚洲日本va午夜在线电影 | 日韩亚洲欧美高清| 欧美日韩在线视频一区二区| 亚洲淫片在线视频| 亚洲在线一区二区| 激情一区二区| 亚洲国产精品99久久久久久久久| 欧美高清在线一区二区| 亚洲一区区二区| 午夜视频在线观看一区二区三区| 国产综合香蕉五月婷在线| 男女av一区三区二区色多| 欧美激情精品久久久久久| 亚洲欧美成人综合| 久久久久这里只有精品| 日韩午夜激情av| 亚洲欧美日韩精品| 亚洲欧洲在线观看| 亚洲午夜精品| 最近中文字幕日韩精品| 一区二区三区高清| 在线观看亚洲| 亚洲一区二三| 亚洲精品乱码久久久久久蜜桃麻豆| 中文在线不卡| 亚洲日本精品国产第一区| 亚洲综合国产精品| 日韩视频二区| 久久精品视频一| 中文精品视频| 久久夜色精品国产欧美乱| 亚洲男人第一网站| 欧美激情第10页| 久久久久国产精品一区二区| 欧美剧在线免费观看网站| 久久另类ts人妖一区二区| 国产精品久久久久久久电影| 亚洲第一毛片| 狠狠爱综合网| 午夜精品www| 亚洲男人av电影| 欧美精品亚洲二区| 亚洲大片av| 亚洲成色777777在线观看影院| 一本久道久久久| 亚洲精品影视| 欧美国产第一页| 欧美插天视频在线播放| 黄色亚洲大片免费在线观看| 亚洲欧美在线免费| 午夜精品国产精品大乳美女| 欧美激情亚洲另类| 欧美激情精品久久久| 好看的亚洲午夜视频在线| 亚洲欧美国产精品桃花| 亚洲在线第一页| 欧美亚日韩国产aⅴ精品中极品| 亚洲国产婷婷| 日韩亚洲国产欧美| 欧美激情综合色| 亚洲精品三级| 亚洲性线免费观看视频成熟| 欧美久久久久| av不卡在线看| 欧美一区视频| 黑人巨大精品欧美黑白配亚洲| 欧美有码视频| 嫩草国产精品入口| 91久久久一线二线三线品牌| 蜜臀av性久久久久蜜臀aⅴ| 欧美成人午夜77777| 在线免费观看日本一区| 欧美mv日韩mv国产网站app| 亚洲国产一区二区三区a毛片| 亚洲精品免费一区二区三区| 欧美久久99| 亚洲欧美国产va在线影院| 欧美自拍丝袜亚洲| 经典三级久久| 欧美精品免费视频| 亚洲视频在线看| 久久久久五月天| 亚洲人成人99网站| 欧美日韩一区三区四区| 西西人体一区二区| 欧美成人免费va影院高清| 99热精品在线| 国产区二精品视| 欧美.www| 亚洲一区在线视频| 美女91精品| 在线中文字幕一区| 国产偷自视频区视频一区二区| 久久久久国产精品一区二区| 亚洲精品久久久久久一区二区 | 亚洲国产成人在线播放| 欧美久久久久中文字幕| 午夜老司机精品| 欧美电影免费观看高清完整版| 一本色道久久综合狠狠躁的推荐| 国产精品日韩欧美综合| 老司机精品久久| 亚洲小视频在线观看| 欧美国产日韩二区| 欧美在线播放高清精品| 亚洲精品一区二区三区蜜桃久| 国产精品一二一区| 欧美黄色影院| 久久久天天操| 亚洲欧美日韩在线一区| 日韩视频一区二区三区在线播放免费观看| 午夜精品三级视频福利| 99精品视频一区| 一区在线电影| 国产香蕉97碰碰久久人人| 欧美午夜寂寞影院| 免费久久久一本精品久久区| 欧美在线播放一区二区| 国产精品99久久99久久久二8| 欧美成人有码| 久久综合九色欧美综合狠狠| 亚洲欧美中文另类| 在线亚洲成人| 99视频精品在线| 亚洲日本成人女熟在线观看| 黑丝一区二区| 国产一区二区三区久久精品| 国产精品久久久久免费a∨| 欧美日韩免费看| 欧美区亚洲区| 欧美日本在线观看| 欧美精品三级| 欧美激情中文字幕一区二区| 欧美激情第六页| 欧美国产日韩一区| 欧美xxxx在线观看| 欧美电影在线观看| 欧美久久久久久久久| 欧美激情影音先锋| 欧美精品日韩| 欧美日韩伊人| 国产精品久久久久三级| 国产精品视频久久| 国产丝袜美腿一区二区三区| 国产日韩1区| 黄色精品一区二区| 91久久精品美女高潮| 亚洲日本乱码在线观看| 日韩午夜视频在线观看| 一区二区三区视频在线| 亚洲女同在线| 久久久精品国产免费观看同学| 久久九九精品| 女人色偷偷aa久久天堂| 亚洲激情社区| 亚洲视频福利| 欧美在线免费视频| 欧美 日韩 国产在线 | 久久精品国产999大香线蕉| 欧美一区二区三区视频免费| 久久精品伊人| 欧美激情欧美狂野欧美精品| 欧美色视频在线| 国产在线观看精品一区二区三区| 很黄很黄激情成人| 99re6热在线精品视频播放速度| 一区二区三区不卡视频在线观看| 亚洲综合日韩| 欧美成人一区二区三区| 日韩一级精品| 欧美有码在线观看视频| 免费日韩视频| 国产精品一区二区男女羞羞无遮挡| 激情久久久久久久久久久久久久久久| 亚洲高清视频在线观看| 国产精品99久久久久久人| 久久成人精品| 亚洲精品日韩综合观看成人91| 亚洲男人的天堂在线| 欧美国产大片| 国产在线欧美| 亚洲一区免费观看| 欧美激情一区三区| 亚洲欧美日韩在线观看a三区| 欧美aa国产视频| 国产日韩欧美制服另类| 99精品欧美一区二区三区综合在线 | 欧美日在线观看| 伊伊综合在线| 午夜在线视频一区二区区别| 亚洲高清三级视频| 欧美有码在线观看视频| 国产精品二区影院| 亚洲精品在线电影|