转自 http://www.cnblogs.com/lyq105/archive/2009/11/28/1612677.html

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的任意字符,贪婪性
注意:在读入的字符串是空字符串时,sscanf函数并不改变待读入到的字符串的值。

例子:
  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);

C语言函数sscanf()的用法相关推荐

  1. python函数装饰器详解_Python语言函数装饰器用法实例详解

    这篇文章主要介绍了Python语言函数装饰器用法,以实例形式较为详细的分析了Python函数装饰器的常见使用技巧,需要的朋友可以参考下,希望对大家学习Python语言有所帮助. 本文实例讲述了pyth ...

  2. go语言函数的常用用法

    如下代码: package mainimport ("errors""fmt" )//相比其他静态语言,go语言的函数有很多亮点 //函数几个要素,1.函数名, ...

  3. C语言函数sscanf:从一个字符串中读进与指定格式相符的数据

    转载自:http://www.aiseminar.cn/html/07/t-407.html C的split string函数--sscanf sscanf 名称: sscanf() - 从一个字符串 ...

  4. 应该掌握的神奇函数——sscanf的用法

    概述: sscanf的作用:从一个字符串中读进于指定格式相符的数据.利用它可以从字符串中取出整数.浮点数和字符串. sscanf和scanf的区别:scanf是以键盘作为输入源,sscanf是以字符串 ...

  5. C语言函数while的用法

    while(1)的用法 while(1);{-} 意义:重复执行里面的代码. 用途: 调试代码时,用来检测一部分代码是否OK,防止后面的代码干扰执行结果,会在观测点加上while(1); 有些代码检测 ...

  6. 字符串处理函数:sscanf 的用法

    前言: 一直对于一些日期字符串中数字的提取比较头疼,现看到 sscanf 对于字符串中的内容提取较方便,学习记录如下.方便以后查询. sscanf():将 C 语言字符串中数据按 指定的格式 将数据存 ...

  7. C语言return的用法详解,C语言函数返回值详解。 (本次转载仅供学习,感谢原创!!转发自C语言中文网,如有侵权请私信本人删除)

    C语言return的用法详解,C语言函数返回值详解 转载:http://c.biancheng.net/view/1855.html 函数的返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这 ...

  8. 在c语言中怎么返回引用参数,C语言函数 函数的声明 C语言的头文件 #include的用法 形参和实参 函数的返回值 - 猫扑天空...

    C语言函数 一.是什么? 是指编程中对一块功能代码的封装,可以理解一个程序片段 二.有什么用? 可以封装代码,方便调用,提高复用性 三.怎么用? 定义:  返回值类型  函数名(形参类型 参数名1-. ...

  9. C语言 SLEEP函数不起作用,C语言中的sleep() 函数 sleep函数的具体用法

    导航:网站首页 > C语言中的sleep() 函数 sleep函数的具体用法 C语言中的sleep() 函数 sleep函数的具体用法 相关问题: 匿名网友: 关于sleep()函数在windo ...

最新文章

  1. 中国移动与苹果联姻 三星在华霸主地位或遭取代
  2. “32 位应用已死!”
  3. Codeforces Hello 2019 D. Makoto and a Blackboard[DP+数论+概率期望]
  4. JavaScript / Electron / ipcMain,ipcRenderer
  5. linux-type命令查看类型
  6. 小K的农场(差分约束)
  7. linux hdfs授予文件夹权限,修修改hdfs上的文件所属用户、所属组等读写执行控制权限...
  8. java编写的视频网站实例_一个在线视频网站的java web 后端开发
  9. QT -- UdpSocket通信实例,使用Qt的UDP通信协议,实现局域网组播通信软件功能
  10. 电脑激活Office时出现异常,激活界面白屏或提示无法与服务器
  11. 蚁群算法(ant system,AS)
  12. PL/SQL 如何查看当前连接信息以及SQL PLUS如何指定IP地址
  13. 链路层协议——SLIP协议和PPP协议
  14. WPF TextBlock 文本换行的两种方式
  15. [笔记]unity渲染类零碎代码记录(100多条)
  16. 电源管理-配置唤醒源
  17. 人生第一篇博客,上班偷闲,来简单了解下springboot启动原理
  18. 致远oa漏洞修复 V5低版本V5.6~V 8.2版本Flash替换为H5化流程图的补丁包
  19. 如何使用Docker搭建PhotoPrism - 打造基于AI私有化的个人相册系统
  20. 数字化仓储管理系统:实现物料入库、出库、库存的高效管理

热门文章

  1. mysql 嵌入式 c开发环境_【Linux】嵌入式C语言MySQL编程(libmysqlclient-dev使用)
  2. 未來用工新趨勢_数字化商业浪潮来袭 未来用工新趋势成焦点
  3. SQL语言学习(六)分组函数学习
  4. Python练习题:合并列表和列表排序
  5. Python:构造函数和析构函数
  6. 怎么判断程序运行的当前目录在哪?关键词:根目录
  7. c语言 fopen、fwrite、fread、fclose函数(打开文件进行读写覆盖或追加)
  8. 【放置奇兵】负面效果(控制、印记、持续伤害)
  9. Jupyter notebook Ipython 魔法函数 Magic 计算代码(函数)耗时 Timing(%%time %time %timeit)
  10. There is no getter for property named ‘col‘ in ‘class String‘,不是说一个参数不需要@Param注解吗?#{}和${}的区别