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);

sscanf函数用法详解相关推荐

  1. sscanf函数用法详解_「MOS考点详解」一道例题详解GETPIVOTDATA函数的用法

    要点提示 GETPIVOTDATA函数是MOS Excel认证考试的重要考点.资深Office培训师谷月老师在此借助一道例题详细解读这个函数. 例题 在「按地区」工作表上的单元格 H3 中,使用 GE ...

  2. C语言中的sscanf()函数使用详解

    这篇文章主要介绍了C语言中的sscanf()函数使用详解,文中附加了一道相关的ACM题目进行补充巩固,需要的朋友可以参考下 文章引用自:https://www.jb51.net/article/711 ...

  3. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  4. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  5. LayoutInflater的inflate函数用法详解

    LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ...

  6. c++ memset 语言_C++中memset函数用法详解

    本文实例讲述了C++中memset函数用法.分享给大家供大家参考,具体如下: 功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常 ...

  7. mysql: union / union all / 自定义函数用法详解

    mysql: union / union all http://www.cnblogs.com/wangyayun/p/6133540.html mysql:自定义函数用法详解 http://www. ...

  8. python中mat函数_Python中flatten( )函数及函数用法详解

    flatten()函数用法 flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组. flatten只能适用于numpy对象,即array或者mat,普通的list列 ...

  9. ROW_NUMBER() OVER()函数用法详解

    今天同事问了一个关于插入表的问题,对象:被插入表sys_equi_disorg   A  , 查询表sys_equi_dict   B 因为A表的ID不是自增的,并且不能更改表结构,主键默认值还是0, ...

最新文章

  1. 报文加解密原理_加密系统的组成与过程
  2. navicat远程连接mysql10060
  3. python和docker交互_jupyter notebook 连接服务器docker中python环境
  4. 程序员的爱情 第十二章
  5. 记录奥运-当今五大Java记录框架之间的竞赛
  6. “咕”了 73 天,何同学终于回归:最喜欢 3D 打印机,但不要买
  7. 【PAT乙】1003 我要通过! (20分) 字符串条件判定
  8. 编写一个java程序在屏幕上输出,编写一个Java程序在屏幕上输出“This is java!”。...
  9. EXCEL 绘制斜线表头
  10. 计算机考试没关好文件,挽救未存盘WPS文件慎点关闭按钮
  11. 带你走进CoDeSys
  12. .net 初中级程序员招聘
  13. 已解决UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x93 in position 20651: illegal multibyte seque
  14. 电影级视觉特效插件:Red Giant VFX Suite for mac
  15. 最详细的Android图片压缩解释
  16. ui培训学校哪个比较好?
  17. DNS和Web服务的配置与访问
  18. Java读取Hdfs的文件数据出现乱码的解决方案和办法
  19. php 5.3中的一个type hinting的用法
  20. C++设计模式----装饰器模式

热门文章

  1. SpringIOC概述
  2. 二叉树的遍历实现-1(三级)
  3. 数字电路技术可能出现的简答题_数字电子技术复习题(本科)
  4. pip install python -32_pip安装python模块方法
  5. c语言 错误 无效的控制谓词,PAT 1025反转链表的代码实现及错误分析(C语言)
  6. java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind
  7. 关于提高代码复用性的几个知识点的回顾
  8. netty+mina 区别概要
  9. Windows XP 专业版与家庭版的区别
  10. 格瑞光电:智慧城市建设的引领者