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语言内存函数memcpy,memmove,memcmp,所以本文将对memcpy,memmove,memcmp 三个函数进行详解和模拟实现,需要的朋友可以参考下
    2023-07-07
  • C++实现闹钟程序的方法

    C++实现闹钟程序的方法

    这篇文章主要介绍了C++实现闹钟程序的方法,比较实用的功能,需要的朋友可以参考下
    2014-08-08
  • C语言实现简单回声服务器

    C语言实现简单回声服务器

    这篇文章主要为大家详细介绍了C语言实现简单回声服务器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 深入浅析C/C++语言结构体指针的使用注意事项

    深入浅析C/C++语言结构体指针的使用注意事项

    这篇文章主要介绍了C/C++语言结构体指针的使用,大家都知道指针在32位系统占用4Byte,在64位系统占用8Byte,下面看下c语言代码例子
    2021-12-12
  • 总结一次C++ 程序优化历程

    总结一次C++ 程序优化历程

    这篇文章主要记录了一次C++程序优化的历程,给大家优化C++程序一些启发,感兴趣的朋友可以了解下
    2020-09-09
  • 深入解析设计模式中的适配器模式在C++中的运用

    深入解析设计模式中的适配器模式在C++中的运用

    这篇文章主要介绍了设计模式中的适配器模式在C++中的运用,通常适配器模式可以细分为类适配器和对象适配器两种情况,需要的朋友可以参考下
    2016-03-03
  • C/C++获取键盘事件的方法

    C/C++获取键盘事件的方法

    今天小编就为大家分享一篇C/C++获取键盘事件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Qt数据库相关应用开发总结

    Qt数据库相关应用开发总结

    这篇文章主要为大家介绍了在Qt数据库应用开发中的一些经验总结,以及一些组件的使用介绍。文中的示例代码讲解详细,需要的可以参考一下
    2022-02-02
  • C++日期类计算器的模拟实现举例详解

    C++日期类计算器的模拟实现举例详解

    两个日期之间相隔天数的计算网上有许多的软件,这里主要介绍如何使用C/C++语言来完成这样的功能,下面这篇文章主要给大家介绍了关于C++日期类计算器的模拟实现,需要的朋友可以参考下
    2023-04-04
  • C语言字符串原地压缩实现方法

    C语言字符串原地压缩实现方法

    这篇文章主要介绍了C语言字符串原地压缩实现方法,包含了字符串的遍历与转换等操作,是很实用的操作技巧,需要的朋友可以参考下
    2014-09-09

最新评论