c/c++ 利用sscanf進行資料拆分操作
阿新 • • 發佈:2020-12-10
sscanf使用示例
示例:使用sscanf分割檔案中的資料,資料來源示例如下
川EZ1E58,貴GQ7708,:1302
貴AE0996,:185
貴A0PJ06,貴JYN192,:128
分割程式碼如下所示:
#include <stdio.h> #include <string.h> int DealLine(char *StrLine) { // find : data save char Parkid[20] = ""; char *p = StrLine; char *prt = StrLine; char carNum[20] = ""; if(p = strstr(p,":")) { p = p + 1; strncpy(Parkid,p,20); printf("Parkid == %s",Parkid); }else{ return -1; } char endflag = 0; while(1){ endflag = *prt; if(endflag == 58) { return 0; } memset(carNum,20); sscanf(prt,"%[^,]",carNum); prt = strstr(prt,","); prt = prt + 1; printf("carNum = %s \n",carNum); } } int main(void) { FILE *fp; char StrLine[1024] = ""; fp = fopen("./test1.txt","r"); //判斷檔案是否存在及可讀 if(fp == NULL) { printf("open fail"); return -1; } while(!feof(fp)){ fgets(StrLine,1024,fp); //讀取一行 printf("\n\n\n"); printf("%s\n",StrLine); int ret = DealLine(StrLine); } fclose(fp); return 0; }
補充知識:sscanf從字串中按照指定格式提取資料
我們在學習C語言的時候,一定都使用過scanf函式,它表示從標準輸入中按照指定格式接收資料到變數。實際程式設計中,我們常常希望能從字串中,提取想要的資料時,此時我們就可以派上sscanf函數了.
sscanf
sscanf 函式宣告如下:
int sscanf( const char* str,const char* format,... );
它表示從字串str中按照format格式提取資料到指定變數中。
sprintf
常常和sscanf配合使用的是sprintf函式,其函式宣告如下:
int sprintf(char *buffer,const char *format,...);
它表示提取變數中的資料按照指定格式組裝成一個字串。
用例
//提取姓名和年齡 char sentence[] = "Rudolph is 12 years old"; char name[20] = {}; int age = 0; sscanf(sentence,"%s is %d",name,&age); printf("name : %s age: %d\n",age); //將字串進行每兩位進行分割,最後一位分割為是一位數. const char* pszClassID = "1234070809001"; unsigned char ucFillMsg[128] = {}; char szSrcMsg[128] = {}; sscanf(pszClassID,"%2d%2d%2d%2d%2d%2d%1d",&ucFillMsg[0],&ucFillMsg[1],&ucFillMsg[2],&ucFillMsg[3],&ucFillMsg[4],&ucFillMsg[5],&ucFillMsg[6]); //還原為字串,不足兩位左邊補0 sprintf(szSrcMsg,"%02d%02d%02d%02d%02d%02d%01d",ucFillMsg[0],ucFillMsg[1],ucFillMsg[2],ucFillMsg[3],ucFillMsg[4],ucFillMsg[5],ucFillMsg[6]); printf("src string : %s\n",szSrcMsg); if (strcmp(pszClassID,szSrcMsg) == 0) { printf("ok\n"); } //提取每個IP值 const char* pszIP = "192.168.45.11"; unsigned char ucIPAddr[4] = {}; sscanf(pszIP,"%d.%d.%d.%d",&ucIPAddr[0],&ucIPAddr[1],&ucIPAddr[2],&ucIPAddr[3]); for (size_t i = 0; i < 4; i++) { printf("ip element[%d] : %d\n",i,ucIPAddr[i]); }
執行結果:
name : Rudolph age: 12 src string : 1234070809001 ok ip element[0] : 192 ip element[1] : 168 ip element[2] : 45 ip element[3] : 11
以上這篇c/c++ 利用sscanf進行資料拆分操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。