时间:2021-05-20
sscanf使用示例
示例:使用sscanf分割文件中的数据,数据源示例如下
川EZ1E58,贵GQ7708,:1302
贵AE0996,:185
贵A0PJ06,贵JYN192,贵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 ,0, 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", name, 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]);//还原为字符串,不足两位左边补0sprintf(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: 12src string : 1234070809001okip element[0] : 192ip element[1] : 168ip element[2] : 45ip element[3] : 11以上这篇c/c++ 利用sscanf进行数据拆分操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了C++利用stringstream进行数据类型转换的方法。分享给大家供大家参考。具体分析如下:在C++标准库里面,使用stringstream可以
Arduino数据类型转换如何轻松玩转Arduino单片机,当我在进行数据转换的时候,遇到了问题,尝试了C语言和C++中的好多函数,都没有达到将float型数据
详解C++中十六进制字符串转数字(数值)主要有两个方法,其实都是对现有函数的使用:方法1:sscanf()函数名:sscanf功能:从字符串格式化输入用法:in
IO:向设备输入数据和输出数据C++的IO流c++中,必须通过特定的已经定义好的类,来处理IO(输入输出)文件流:对文件进行读写操作头文件:类库:ifstrea
在C++中则把字符串封装成了一种数据类型string,可以直接声明变量并进行赋值等字符串操作。以下是C字符串和C++中string的区别:C字符串string对