c/c++ 利用sscanf进行数据拆分操作

 更新时间:2020年12月10日 09:48:41   作者:冬暖海洋  
这篇文章主要介绍了c/c++ 利用sscanf进行数据拆分操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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]);
//还原为字符串,不足两位左边补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进行数据拆分操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 浅理解C++ 人脸识别系统的实现

    浅理解C++ 人脸识别系统的实现

    这篇文章主要介绍了浅理解C++ 人脸识别系统的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • C++抛出和接收异常的顺序

    C++抛出和接收异常的顺序

    这篇文章主要介绍了C++抛出和接收异常的顺序,帮助大家更好的理解和学习C++,感兴趣的朋友可以了解下
    2020-08-08
  • C语言字符串函数介绍与模拟实现详解

    C语言字符串函数介绍与模拟实现详解

    这篇文章主要介绍了C语言实现字符串操作函数的实例的相关资料,开发程序的时候经常使用到一些字符串函数,例如求字符串长度,拷贝字符串……,需要的朋友可以参考下
    2021-09-09
  • MFC Frame-Splitter模型实例原理解析

    MFC Frame-Splitter模型实例原理解析

    这篇文章主要介绍了MFC Frame-Splitter模型实例原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • C++中的STL常用算法之遍历算法详解

    C++中的STL常用算法之遍历算法详解

    这篇文章主要介绍了C++中的STL常用算法之遍历算法详解,ransform() 可以将函数应用到容器的元素上,并将这个函数返回的值保存到另一个容器中,它返回的迭代器指向输出容器所保存的最后一个元素的下一个位置,需要的朋友可以参考下
    2023-12-12
  • Linux中使用C语言的fork()函数创建子进程的实例教程

    Linux中使用C语言的fork()函数创建子进程的实例教程

    fork是一个在Linux系统环境下专有的函数,现有的进程调用fork后将会创建一个新的进程,这里我们就来看一下Linux中使用C语言的fork()函数创建子进程的实例教程
    2016-06-06
  • C语言之malloc动态分配内存和free释放

    C语言之malloc动态分配内存和free释放

    这篇文章主要介绍了C语言之malloc动态分配内存和free释放,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • C语言中查询进程信号是否被遮罩或搁置的简单方法

    C语言中查询进程信号是否被遮罩或搁置的简单方法

    这篇文章主要介绍了C语言中查询进程信号是否被遮罩或搁置的简单方法,包括sigprocmask函数和sigpending函数的简介,需要的朋友可以参考下
    2015-09-09
  • C语言常见排序算法归并排序

    C语言常见排序算法归并排序

    这篇文章主要介绍了C语言常见排序算法归并排序,归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用
    2022-07-07
  • 深度揭秘C++面向对象编程中继承的核心概念

    深度揭秘C++面向对象编程中继承的核心概念

    我们知道C语言是面向过程的编程语言,C++在C语言的基础上进化出了面向对象的模型,而继承就是面向对象的重要属性,下面就让小编来和大家详细讲讲吧
    2023-07-07

最新评论