sscanf用法详解-hdu2072

名称: 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353354.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

只需几分钟即可安装Red Hat Container Development Kit(视频)

自从我开始使用各种形式的OpenShift(例如带盒的Online,然后又作为容器化的图像)玩耍以来,没有什么比Red Hat Container Development Kit(CDK)的可用性令我兴奋。 该套件使您可以轻松地访问完整的&#xff…

一、Objective-C之Runtime的概念

前一篇关于NSProxy代理涉及到的关于消息转发,把以前写的runtime文章从github上转移过来。一共三篇,似乎自己也忘记了一些runtime的细节,需要温故一下。 一、什么是Objc的Runtime? Runtime是Objc语言的磐石,Objc语言得以…

matlab 替换指定的元素

方法二:a[12 4 5 6 0 12 0];bfind(a0);%将a中的0替换为8a(b)8方法一:a[12 4 5 6 0 12 0];blogical(a0);%将a中的0替换为8(%数值转逻辑,不知道为什么可以这样用)a(b)8注:1. 该替换函数不能替换NaN替换NaN可用…

[P1580] yyy loves Easter_Egg I

Link: P1580 传送门 Solution: 拿来练练字符串的读入: 1、$gets()$相当于$c$中的$getline()$,但返回值为指针!(无数据时为NULL) (都读入换行符,并将其舍弃) 2、$sscanf(起始指针,...…

matlab按某一列排序

bsortrows(a,2) %a 为要排序的矩阵。2表示按第几列进行排序,整数代表升序,负数代表降序。%将矩阵a按照第2列的升序排列,其他列不会作升序排列,而是将跟随着第2列 的变化,保持一一对应。bsortrows(a,-3) %将矩阵a按照…

python特殊函数__str__、__repr__和__len__

1.__str__ 首先介绍__str__ class Students(object):def __init__(self, *args):self.names args# def __str__(self): #   return str(self.names) # __repr__ __str__ ss Students(hyq,ysy) ss>>><__main__.Students at 0x2075a779828> 打印类对象…

MATLAB对矩阵中元素的访问

矩阵访问一律用()&#xff0c;元胞数组用{}a(i,j)%第i行第j列队元素a(:,j)%第j列的所有元素a(2:end,j)%第j列中第2行到最后一行的元素a(:,3:5)%第3〜5列的所有元素a(x)%第x个元素&#xff08;x为从最左边第1列开始编号&#xff0c;若a为4行5列&#xff0c;则a(10)a(2,3)&#x…

c函数scanf(),printf()等常用格式字符串

%d 短整形,一般占两个字节%u 无符号短整形%ld 长整形,一般占四个字节%c 字符型%s 字符串主要用在输入输出函数&#xff1a;scanf(),printf()里/a:蜂鸣&#xff0c;响铃 /b:回退&#xff1a;向后退一格 /f:换页 /n:换行&#xff0c;光标到下行行首 /r:回车&#xff0c…

jsf服务_使用JSF的面向服务的UI

jsf服务在大型软件开发项目中&#xff0c;面向服务的体系结构非常常见&#xff0c;因为它提供了可供不同团队或部门使用的功能接口。 创建用户界面时&#xff0c;应应用相同的原理。 对于具有开票部门和客户管理部门等的大型公司&#xff0c;组织结构图可能如下所示&#xff1a…

MATLAB矩阵对称旋转

fliplr(a) 矩阵左右翻转 flipud(a) 矩阵上下翻转 rot90(a)矩阵逆时针旋转90度&#xff08;把你的头顺时针旋转90看原数就可以知道结果了,^-^&#xff09;rot90(a,k) k参数定义为逆时针旋转90*k度。

English trip -- Phonics 3 元音字母e

xu言&#xff1a; 额...今天给我上自然拼读的maple老师 - . -和上次给我上第二集自然拼读的是同一个老师。突然考了考我上次学的内容~感觉大脑一片空白。看来review不能光说而不下苦功夫啊... 元音 vowel 长音 /i:/ be me we he chinese ee meet bee see sleep queen …

生成随机测试数据的文件的程序

例如以下简单的AB问题&#xff1a; 样例 输入&#xff1a; 1 2 输出&#xff1a; 3 答案&#xff1a; #include <stdio.h> int main() {int a,b;while(scanf("%d%d",&a,&b)!EOF){printf("%d\n",ab);}return 0; }机器的测试&#xff1a;…

ANTLR和Jetbrains MPS:解析文件并以树符号显示AST

Itemis再次这样做&#xff1a;他们刚刚为Jetbrains MPS发布了一个非常酷的新插件。 这允许定义新的树编辑器。 他们看起来像这样&#xff1a; 在这篇文章中&#xff0c;我们将看到&#xff1a; 如何在MPS中使用ANTLR解析器 如何使用树符号表示已解析的AST 特别是&#xf…

MATLAB判断矩阵相等

1. AB;%得到的是一个矩阵&#xff0c;对应值相等则返回1&#xff0c;否则返回02. ~norm(A-B);%若AB则A-B全零&#xff0c;norm(A-B)的结果为0&#xff0c;否则为1&#xff1b;其中norm为范数3. ~sum(sum(abs(A-B)));%原理和2相同&#xff0c;但是计算速度要快于2数倍 4. isequ…

python全栈-Day 1

Python是一种动态强类型解释型语言 1、Python历史 Python2与Python3的区别&#xff1a; Python2&#xff1a; 源码不标准&#xff0c;混乱&#xff0c;重复代码多 默认编码方式是ASCII码&#xff0c;因此需要在文件的首行 #-*- encoding:utf-8 -*- Python3&#xff1a; 统一标准…

KMP字符串模式匹配详解

刚看到位兄弟也贴了份KMP算法说明&#xff0c;但本人觉得说的不是很详细&#xff0c;当初我在看这个算法的时候也看的头晕昏昏的&#xff0c;我贴的这份也是网上找的。且听详细分解&#xff1a;KMP字符串模式匹配详解 来自CSDN A_B_C_ABC 网友 KMP字符串模式匹配通俗点说…

Matlab找矩阵中最大最小值的位置

1. ind find(Amin(min(A)));2. [row,column]find(Amin(min(A)));

ASP.NET Core IdentityServer4 新手上路

OAuth2.0资料 今天看到一篇博主写了该系列文章,贴图和过程都比较详细,俗话说实践是检验真理的唯一标准&#xff08;如果是按照参考文章复制粘贴,应该不会出现踩坑&#xff0c;但是我喜欢自己手动敲一遍&#xff09;&#xff0c;发现几个坑&#xff0c;因而总结下经验&#xff0…