百度的sscanf()函数解释---不错,PS: 向星星大哥和softmse (Jake) 致谢了,有了你们才有它啊

字符串处理函数:sscanf 的用法 一直对于一些日期字符串中数字的提取比较头疼,现看到 sscanf 对于字符串中的内容提取较方便,学习记录如下。方便以后查询。 阅读详情

sscanf

   名称:
  sscanf() - 从一个字符串中读进与指定格式相符的数据.
   函数原型:
  Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );
  int scanf( const char *format [,argument]... );
   说明:
  sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
  其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '/t' | '/n' | 非%符号}
   注:
  1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
  2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
  3、width表示读取宽度。
  4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
  5、type :这就很多了,就是%s,%d之类。
  6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
   支持集合操作:
  %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
  %[aB'] 匹配a、B、'中一员,贪婪性
  %[^a] 匹配非a的任意字符,贪婪性

例子:

  1. 常见用法。
  char buf[512] = ;
  sscanf("123456 ", "%s", buf);
  printf("%s/n", buf);
  结果为:123456
  2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
  sscanf("123456 ", "%4s", buf);
  printf("%s/n", buf);
  结果为:1234
  3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
  sscanf("123456 abcdedf", "%[^ ]", buf);
  printf("%s/n", buf);
  结果为:123456
  4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
  sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);
  printf("%s/n", buf);
  结果为:123456abcdedf
  5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
  sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);
  printf("%s/n", buf);
  结果为:123456abcdedf
  6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中
  sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);
  printf("%s/n", buf);
  结果为:12DDWDFF
  7、给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格)
  sscanf(“hello, world”, "%*s%s", buf);
  printf("%s/n", buf);
  结果为:world
  %*s表示第一个匹配到的%s被过滤掉,即hello被过滤了
  如果没有空格则结果为NULL。
  sscanf的功能很类似于正则表达式, 但却没有正则表达式强大,所以如果对于比较复杂的字符串处理,建议使用正则表达式.
  //-------------------------------------------------------
  sscanf,表示从字符串中格式化输入
  上面表示从str中,输入数字给x,就是32700
  久以前,我以为c没有自己的split string函数,后来我发现了sscanf;一直以来,我以为sscanf只能以空格来界定字符串,现在我发现我错了。
  sscanf是一个运行时函数,原形很简单:
  int sscanf(
  const char *buffer,
  const char *format [,
  argument ] ...
  );
  它强大的功能体现在对format的支持上。
  我以前用它来分隔类似这样的字符串2006:03:18:
  int a, b, c;
  sscanf("2006:03:18", "%d:%d:%d", a, b, c);
  以及2006:03:18 - 2006:04:18:
  char sztime1[16] = "", sztime2[16] = "";
  sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);
  但是后来,我需要处理2006:03:18-2006:04:18
  仅仅是取消了‘-’两边的空格,却打破了%s对字符串的界定。
  我需要重新设计一个函数来处理这样的情况?这并不复杂,但是,为了使所有的代码都有统一的风格,我需要改动很多地方,把已有的sscanf替换成我自己的分割函数。我以为我肯定需要这样做,并伴随着对sscanf的强烈不满而入睡;一觉醒来,发现其实不必。
  format-type中有%[]这样的type field。如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。
  %[]类似于一个正则表达式。[a-z]表示读取a-z的所有字符,[^a-z]表示读取除a-z以外的所有字符。
  所以那个问题也就迎刃而解了:
  sscanf("2006:03:18 - 2006:04:18", "%[0-9,:] - %[0-9,:]", sztime1, sztime2);
  在softmse (Jake) 的问题贴http://community.youkuaiyun.com/Expert/topic/4843/4843294.xml?temp=.4321558中 ,周星星给出了一个很cool的sscanf用例,而后通过学习,发现sscanf真棒,现做一总结。
  原问题:
  iios/12DDWDFF@122
  获取/和@之间的字符串怎么做
  C程序里面有什么函数吗?
  周星星的代码:
  #include <stdio.h>
  int main()
  {
  const char* s = "iios/12DDWDFF@122";
  char buf[20];
  sscanf( s, "%*[^/]/%[^@]", buf );
  printf( "%s/n", buf );
  return 0;
  }
  结果为:12DDWDFF
  sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
  函数原型:
  int scanf( const char *format [,argument]... );
  其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '/t' | '/n' | 非%符号},
  注:{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
  width:宽度,一般可以忽略,用法如:
  const char sourceStr[] = "hello, world";
  char buf[10] = ;
  sscanf(sourceStr, "%5s", buf); //%5s,只取5个字符
  cout << buf<< endl;
  结果为:hello
  {h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
  type :这就很多了,就是%s,%d之类。
  特别的:
  %*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值。如:
  const char sourceStr[] = "hello, world";
  char buf[10] = ;
  sscanf(sourceStr, "%*s%s", buf); //%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了
  cout << buf<< endl;
  结果为:world
  支持集合操作:
  %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
  %[aB'] 匹配a、B、'中一员,贪婪性
  %[^a] 匹配非a的任意字符,贪婪性
  是不是感觉眼熟了啊,不错,这和正则表达式很相似,而且仍然支持过滤,即可以有%*[a-z].如:
  星星大哥例子回顾:
  const char* s = "iios/12DDWDFF@122";
  char buf[20];
  sscanf( s, "%*[^/]/%[^@]", buf );
  printf( "%s/n", buf );
  由例子3-》取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
  sscanf("123456 abcdedf", "%[^ ]", buf);
  printf("%s/n", buf);
  结果为:123456
  所以周星星的代码总结应该为:
  const char* s = "iios/12DDWDFF@122";
  char buf[20];
  sscanf( s, "%*[^/]/%[^@]", buf );
  printf( "%s/n", buf );
  先将 "iios/"过滤掉,再将到字符 '@'为止的一串12DDWDFF(由例3可得此串到@为止,把@122舍掉)内容即是:12DDWDFF送到buf中,得到结果。
C语言全网最全sscanf函数用法,没有的评论区提,随时更新 本教程分初级、进阶、实战用例,有基础的直接跳到后面吧。本文主要拿AT指令做例子。写得不好别喷,合理的要求可以提出来我尽力改。本教程应该足以面对大部分的解析。最后部分主要是实战为主。各位有想解析的字符串可以放到评论区,比较经典的我会放到文章里。 阅读详情

相关推荐

C#海康威视摄像头控制,将IntPtr转换成Bitmap图片

C#通过skd控制海康威视摄像头,获取bitmap格式图片

ReflexMechanism的博客 6586

sscanf函数详细介绍及使用方法解析

sscanf函数详细介绍及使用方法解析

深耕嵌入式领用多年, 致力于分享嵌入式领域技术! 3万+

Python实战:5分钟搞定固定翼无人机三自由度仿真(附完整代码)

本文提供了一个基于Python的固定翼无人机三自由度仿真快速实现方案。通过面向对象设计,封装了核心运动学模型,并对比了欧拉法与龙格-库塔法两种积分方法。文章附有完整实例代码,帮助算法工程师和研究人员在5分钟内搭建轻量级仿真环境,用于快速验证控制律、路径规划等核心算法逻辑。

docker7nomad的博客 749

sscanf函数使用详解

一、描述 sscanf通常被用来解析并转换字符串,其格式定义灵活多变,可以实现很强大的字符串解析功能。 sscanf的原型 #include <stdio.h> int sscanf(const char *str, const char *format, ...); str:待解析的字符串; format:字符串格式描述; 其后是一序列数目不定的指针参数,存储解析后的数据. 二、示例用法 1. sscanf的基本用法 整形数转换 int year, month, day

轮子工厂 12万+

台达PLC使用RS485Modbus指令通信

台达PLC,RS485,Modbus RTU,从站梯形图,0X01,0X02,0X05,CRC校验

lilililimu的博客 1万+

MPC-CBF 控制原理详解

假设系统满足如下离散时间动力学模型xt1fxtutxt∈Xut∈Uxt1​fxt​ut​xt​∈Xut​∈Uxtx_txt​:状态变量,定义域为可行状态集X⊆RnX⊆Rnutu_tut​:控制输入,定义域为控制约束集U⊆RmU⊆Rm系统需满足安全约束,由如下控制障碍函数(CBF)hX→RhX→RCx∈X∣hx≥0C:=x∈X∣hx≥。

m0_54691290的博客 1183

【C语言 | 字符串处理】sscanf 详细介绍、使用说明以及使用例子源码

👉本文详细介绍了C语言解析字符串常用的sscanf函数,并给出了使用该函数解析字符串的例子。

wkd_007的博客 1万+

COMSOL+AI实战:5个超实用技巧让你的仿真效率翻倍(附Python代码)

本文详细介绍了如何将人工智能(AI)与COMSOL仿真软件结合,通过Python脚本实现五大实用技巧,包括自动化生成数据集、构建代理模型、集成AI优化算法、利用神经网络加速场量求解以及智能结果分析,从而显著提升多物理场仿真的效率和自动化水平。

weixin_29230865的博客 443

C语言中的函数sscanf()用法

进行%s、%d、%x等转换时,若不指定长度,它最多读到空格,它会以空格隔开;即使指定更大的长度,它也会以空格为限。你只要记住一点,不管是%[abc]、%[1-9a-z]、还是%[^A-Z],都是。遇到哪些字符时就结束。

qq_1328512592的博客 1855

57. SAP UI5 应用基于 OData 注解的 Smart Field 使用方法学习

所谓 SAP UI5 Smart Field,顾名思义,是一类比较`智能`的控件,这类控件同 SAP UI5 传统的控件不同,会根据 SAP UI5 应用程序连接的 OData 服务中元数据里提供的注解(`annotations`),在运行时动态生成底层的 SAP UI5 控件。...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2771

点云数据生成DEM,并导出三维模型

点云数据生成DEM,并导出三维模型

qq_42540466的博客 2万+

【C语言】sscanf()的详细使用方法

从这个例子中可以看到,必须要第一个开始是a-z或者A-Z才可以取到。前面使用数字修饰词表示这个字符串缓冲区的最大长度,防止缓存区溢出。从这个例子中可以看出,必须要第一个开始是1-9才可以跳过。@argument:存储解析出来的数据。头文件:#inlucde @format:字符串的格式。@buffer:存储的数据。读取到任意A-Z的字符就停止读入。读取所有1-9的字符。跳过a-z数据不读入。

W__winter的博客 4059

【数据集实例】CMIP6气候模式数据下载-以河东地区为例

以河东地区为例,介绍CMIP6数据下载及处理

WW、forever的博客 4946

【C/C++】 sscanf函数、sprintf函数、%[]格式符详解

sscanf函数、sprintf函数、%[]格式符的用法详解。

这里是阿安的博客 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C语言库函数篇1:sscanf用法

前言 本节,我们将学习C语言库函数sscanf()的使用,使用sscanf可以快速的从复杂字符串中获取自己需要的数据。 一、 基础知识 1.简介 sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。 2.函数描述 int sscanf(const char *buffer, const char *format, [argument]...); 参数: buffer:需要解析的源字符串 format:窗体控件字符串,定义解析字符串的规则,可以是一

weixin_45006076的博客 4387

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

sscanf的用法

sscanf的作用:从一个字符串中读进于指定格式相符的数据。利用它可以从字符串中取出整数、浮点数和字符串。 sscanf和scanf的区别:scanf是以键盘作为输入源,sscanf是以字符串作为输入源。 sscanf: 原型: int sscanf(const char *str, const char *format,......); 说明: sscanf()会将参数str的...

yanyanwenmeng的博客 7万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C语言sscanf()函数格式化字符串用法

原文:https://www.etdev.net/thread-107-1-1.html 1. 概述 sscanf()为C语言标准库函数,用于从指定字符串中读入与指定格式相符的数据。函数原型声明在stdio.h头文件中:int sscanf(const char *str, const char *format, ...); 该函数根据参数format(格式化字符串)来转换参数str指...

睿思派克 2840

甜甜C语言——sscanf()函数

文章目录前言函数头文件函数原型函数功能实现初级用法纯数字转换(int)纯数字转换(double)高级用法取指定长度的字符串取到指定字符为止关于 * 的使用高高级用法财大OJ例题结语 前言 最近突然多出来了C语言实践课,老师补充了很多新的知识,学到了很多✈️✈️,特别喜欢我的C语言老师(米老师),就算我说了名字,宝子💕💕你也不认识。有一说一,假如让我一直跟着米老师上课,我保证不会偷懒,而且还可能会跟💞宝儿们💞分享更多的神奇知识。 🚀🚀看见米老师就不自觉打开C Primer Plus ,打开 DEV ,开始写代

Lucky.Mr.Li的博客 6641

sscanf用法详解

sscanf是从字符串中读取指定整型,浮点型及其他指定数据类型的函数 sscanf和scanf的不同是,前者是从字符串中读取。后者是从键盘输入中读取   sscanf的定义 int sscanf (const char *str, const char * format,…); 这就是说括号里面填写的必须是指针,整型变量也需要加上取值符&   1、将字符串转化为...

qpfxgg的博客 6072

C语言中sprintf()和sscanf()函数详解

sprintf()函数用于将格式化的数据写入字符串中,而不是输出到控制台。它的功能类似于printf()函数,但printf()是将格式化的数据输出到标准输出(通常是控制台),而sprintf()是将数据写入一个字符串。sscanf()函数用于从字符串中读取格式化的数据。它的功能类似于scanf()函数,但scanf()是从标准输入(通常是键盘)读取数据,而sscanf()是从一个字符串中读取数据。sprintf()和sscanf()是C语言中两个非常有用的函数,它们分别用于字符串的格式化输出和格式化输入。

新华编程特战队 6899

sscanf函数的用法(高级进阶用法/正则表达式/贪婪性)

format: 字符串格式,可以是一个或多个 {%[*] [width] [{h | I | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号};将已知的字符串通过格式化匹配出有效信息。sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。返回值:返回成功赋值的个数;返回值为 0 表示没有将任何字段赋值。成功则返回参数数目,失败则返回-1,错误原因存于errno中;str: 待解析的字符串;

嵌入式大师之路 1570

“深入了解C语言中的输入函数:scanf、fscanf和sscanf“

我们深入了解了 scanf 函数在 C 编程语言中的作用和用法。我们知道,scanf 函数通过格式字符串来指定要读取的数据类型和格式,它可以读取整数、浮点数、字符串等多种数据类型。同时,我们也学习了如何使用 fscanf 和 sscanf 函数来从文件流和字符串中读取格式化输入。将有助于我们在编程过程中更有效地处理用户输入和文件读取操作。

qq_67411584的博客 3438

sscanf详解

1.头文件:#include 2. 定义函数 int sscanf (const char *str,const char * format,........); 3.函数说明: sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。 4.用途:一个字符串中读进与指定格式相符的数据。字符串操作是

飞剑神 5695

字符串函数 sscanf() 详解

字符串函数 sscanf() 详解

嘻嘻爱编码的博客 3834

sscanf

 sscanf  名称:  sscanf() - 从一个字符串中读进与指定格式相符的数据.   函数原型:  Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );  int scanf( const char *format [,argument]... );   说明:  sscanf与

537
上一篇: 借鉴他人:彻底搞定C指针-函数名与函数指针
下一篇: 3G-324M和H.324M的区别
mukubes
博客等级 码龄20年 2粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值