c/c++ 利用sscanf进行数据拆分操作
sscanf使用示例
示例:使用sscanf分割文件中的数据,数据源示例如下
川EZ1E58,贵GQ7708,:1302
贵AE0996,:185
贵A0PJ06,贵JYN192,贵JYN192,:128
分割代码如下所示:
#include#include intDealLine(char*StrLine) { //find:datasave charParkid[20]=""; char*p=StrLine; char*prt=StrLine; charcarNum[20]=""; if(p=strstr(p,":")) { p=p+1; strncpy(Parkid,p,20); printf("Parkid==%s",Parkid); }else{ return-1; } charendflag=0; while(1){ endflag=*prt; if(endflag==58) { return0; } memset(carNum,0,20); sscanf(prt,"%[^,]",carNum); prt=strstr(prt,","); prt=prt+1; printf("carNum=%s\n",carNum); } } intmain(void) { FILE*fp; charStrLine[1024]=""; fp=fopen("./test1.txt","r");//判断文件是否存在及可读 if(fp==NULL) { printf("openfail"); return-1; } while(!feof(fp)){ fgets(StrLine,1024,fp);//读取一行 printf("\n\n\n"); printf("%s\n",StrLine); intret=DealLine(StrLine); } fclose(fp); return0; }
补充知识:sscanf从字符串中按照指定格式提取数据
我们在学习C语言的时候,一定都使用过scanf函数,它表示从标准输入中按照指定格式接收数据到变量。实际编程中,我们常常希望能从字符串中,提取想要的数据时,此时我们就可以派上sscanf函数了.
sscanf
sscanf函数声明如下:
intsscanf(constchar*str,constchar*format,...);
它表示从字符串str中按照format格式提取数据到指定变量中。
sprintf
常常和sscanf配合使用的是sprintf函数,其函数声明如下:
intsprintf(char*buffer,constchar*format,...);
它表示提取变量中的数据按照指定格式组装成一个字符串。
用例
//提取姓名和年龄
charsentence[]="Rudolphis12yearsold";
charname[20]={};
intage=0;
sscanf(sentence,"%sis%d",name,&age);
printf("name:%sage:%d\n",name,age);
//将字符串进行每两位进行分割,最后一位分割为是一位数.
constchar*pszClassID="1234070809001";
unsignedcharucFillMsg[128]={};
charszSrcMsg[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("srcstring:%s\n",szSrcMsg);
if(strcmp(pszClassID,szSrcMsg)==0)
{
printf("ok\n");
}
//提取每个IP值
constchar*pszIP="192.168.45.11";
unsignedcharucIPAddr[4]={};
sscanf(pszIP,"%d.%d.%d.%d",&ucIPAddr[0],
&ucIPAddr[1],
&ucIPAddr[2],
&ucIPAddr[3]);
for(size_ti=0;i<4;i++)
{
printf("ipelement[%d]:%d\n",i,ucIPAddr[i]);
}
执行结果:
name:Rudolphage:12 srcstring:1234070809001 ok ipelement[0]:192 ipelement[1]:168 ipelement[2]:45 ipelement[3]:11
以上这篇c/c++利用sscanf进行数据拆分操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。