日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sscanf函数—(sprintf的反)

發(fā)布時(shí)間:2025/4/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sscanf函数—(sprintf的反) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

先上例子:

#include?<stdio.h> using?namespace?std; int?main() {const?char*?s?=?"123456";char?buf[20];unsigned?int?aa1,?aa2,?aa3;//注意不能用unsigned?charsscanf(?s,?"%02x%02x%02x",?&aa1,?&aa2,?&aa3?);printf(?"%02x,%02x,%02x\n",?aa1,?aa2,?aa3?);return?0; }

頭文件

#include<stdio.h>

?定義函數(shù) int sscanf (const char *str,const char * format,........);

函數(shù)說明?

?sscanf()會(huì)將參數(shù)str的字符串根據(jù)參數(shù)format字符串來轉(zhuǎn)換并格式化數(shù)據(jù)。格式轉(zhuǎn)換形式請(qǐng)參考scanf()。轉(zhuǎn)換后的結(jié)果存于對(duì)應(yīng)的參數(shù)內(nèi)。

返回值 成功則返回參數(shù)數(shù)目,失敗則返回-1,錯(cuò)誤原因存于errno中。 返回0表示失敗 ? ?否則,表示正確格式化數(shù)據(jù)的個(gè)數(shù) ? ?例如:sscanf(str,"%d%d%s", &i,&i2, &s); ? ?如果三個(gè)變成都讀入成功會(huì)返回3。 ? ?如果只讀入了第一個(gè)整數(shù)到i則會(huì)返回1。證明無法從str讀入第二個(gè)整數(shù)。

void?main()? {?int?i;?unsigned?int?j;?char?input[?]=”10?0x1b?aaaaaaaa?bbbbbbbb”;?char?s[5];?sscanf(input,”%d?%x?%5[a-z]?%*s?%f”,&i,&j,s,s);?printf(“%d?%d?%s?”,i,j,s);? }

執(zhí)行 10 27 aaaaa

大家都知道sscanf是一個(gè)很好用的函數(shù),利用它可以從字符串中取出整數(shù)、浮點(diǎn)數(shù)和字符串等等。它的使用方法簡單,特別對(duì)于整數(shù)和浮點(diǎn)數(shù)來說。但新手可能并不知道處理字符串時(shí)的一些高級(jí)用法,這里做個(gè)簡要說明吧。

1. 常見用法

char?str[512]={0}; sscanf("123456","%s",str); printf("str=%s",str);

2. 取指定長度的字符串。如在下例中,取最大長度為4字節(jié)的字符串。

char?str[512]={0}; sscanf("123456","%4s",str); printf("str=%s",str);

3. 取到指定字符為止的字符串。如在下例中,取遇到空格為止字符串。

char?str[512]={0}; sscanf("123456abcdedf","%[^]",str); printf("str=%s",str);

4. 取僅包含指定字符集的字符串。如在下例中,取僅包含1到9和小寫字母的字符串。

char?str[512]={0}; sscanf("123456abcdedfBCDEF","%[1-9a-z]",str); printf("str=%s",str);

5. 取到指定字符集為止的字符串。如在下例中,取遇到大寫字母為止的字符串。

char?str[1024]={0}; sscanf("123456abcdedfBCDEF",?"%[^A-Z]",?str); printf("str=%s\n",?str);

6. 可以用如下代碼將字符串形式的ip地址轉(zhuǎn)換為四個(gè)整數(shù)

char?*?inputIp="192.168.199.100"; int?ip[4]; sscanf(inputIp,?"%d.%d.%d.%d",?&ip[0],?&ip[1],&ip[2],&ip[3]); printf("%d.%d.%d.%d\n",ip[0],?ip[1],ip[2],ip[3]);

7. sscanf的使用,以解析時(shí)間字符串為例,將字符串“2009-01-02_11:12:13”解析為整型年月日時(shí)分秒

//定義char?cc;tm?tm_temp={0};string?stime("2009-01-02_11:12:13");

//(1) 必須嚴(yán)格按照分隔符形式匹配填寫,若遇到不匹配項(xiàng)則終止解析

?sscanf(stime.c_str(),?"%4d-%2d-%2d_%2d:%2d:%2d",&tm_temp.tm_year,?&tm_temp.tm_mon,?&tm_temp.tm_mday,?&tm_temp.tm_hour,?&tm_temp.tm_min,?&tm_temp.tm_sec);

//(2) 可以不按照分割符號(hào)形式填寫,字符數(shù)必須一致,例如可以正確解析“2009/01/02_11:12:13”

?sscanf(stime.c_str(),?"%4d%c%2d%c%2d%c%2d%c%2d%c%2d",&tm_temp.tm_year,?&cc,&tm_temp.tm_mon,?&cc,&tm_temp.tm_mday,?&cc,&tm_temp.tm_hour,?&cc,&tm_temp.tm_min,?&cc,&tm_temp.tm_sec);

//(3) 可以不按照分割符號(hào)形式填寫,字符數(shù)必須一致,同上,%1s可以等同于%c

?sscanf(stime.c_str(),?"%4d%1s%2d%1s%2d%1s%2d%1s%2d%1s%2d",&tm_temp.tm_year,?&cc,&tm_temp.tm_mon,?&cc,&tm_temp.tm_mday,?&cc,&tm_temp.tm_hour,?&cc,&tm_temp.tm_min,?&cc,&tm_temp.tm_sec);

//(4) 可以不按照分割符形式和數(shù)量填寫,類型必須一致,例如可以正確解析“2009/01/02___11:12:13”

//這里使用了sscanf的正則表達(dá)式,與通用的正則表示類似但不完全相同,%*c表示忽略連續(xù)多個(gè)字符

?sscanf(stime.c_str(),?"%4d%*c%2d%*c%2d%*c%2d%*c%2d%*c%2d",&tm_temp.tm_year,?&tm_temp.tm_mon,?&tm_temp.tm_mday,?&tm_temp.tm_hour,?&tm_temp.tm_min,?&tm_temp.tm_sec);


轉(zhuǎn)載于:https://my.oschina.net/crooner/blog/221952

總結(jié)

以上是生活随笔為你收集整理的sscanf函数—(sprintf的反)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。