日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

sscanf函数—(sprintf的反)

發布時間:2025/4/5 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sscanf函数—(sprintf的反) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

先上例子:

#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>

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

函數說明?

?sscanf()會將參數str的字符串根據參數format字符串來轉換并格式化數據。格式轉換形式請參考scanf()。轉換后的結果存于對應的參數內。

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

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);? }

執行 10 27 aaaaa

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

1. 常見用法

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

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

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地址轉換為四個整數

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的使用,以解析時間字符串為例,將字符串“2009-01-02_11:12:13”解析為整型年月日時分秒

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

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

?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) 可以不按照分割符號形式填寫,字符數必須一致,例如可以正確解析“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) 可以不按照分割符號形式填寫,字符數必須一致,同上,%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) 可以不按照分割符形式和數量填寫,類型必須一致,例如可以正確解析“2009/01/02___11:12:13”

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

?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);


轉載于:https://my.oschina.net/crooner/blog/221952

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。