sscanf和sprintf是scanf和printf家族用法 (转)
sscanf和sprintf是scanf和printf家族用法
sscanf和sprintf是scanf和printf家族的一对成员,用于处理和分析字符串非常强大得两个函数
头文件 stdio.h
原型
int sscanf(
const char *buffer,
const char *format,
...
);
int sprintf(
char *buffer,
const char *format,
...
);
功能:类似于scanf和printf 但把字符串*buffer用于输入输出
1.sprintf用于格式化字符串
把变量打印到字符串中,从而获得数字的字符形式,这样不需要手工转换。
例如
char c[100];
int k=255;
sprintf(c,"%d",k);
//c包含"255"
2.sprintf用于进制转换
可以方便地得到变量的十六进制和八进制字符序列,再稍加处理即可得到每一位的值。
char c[100];
int k=255;
sprintf(c,"%x",k);
//c包含"ff" c[0]='f' c[1]='f'
3.sprintf用于连接字符串
方便地连接两个或者多个字符串
char buf[1024];
char a[100]="I ";
char b[100]="love ";
char c[100]="ACM."
sprintf(buf,"%s%s%s",a,b,c);
//buf 包含"I love ACM."
4.sscanf用于处理输入
有些比较麻烦的输入输出用sscanf处理将会非常方便
如hrbeu1002 (这里给出的不是完整代码,其中输出部分只是简单地原样打印出来。)
因为scanf在使用除了%c以外的格式时都忽略换行符'\n',题中用空行来区分不同case的要求
显得难以处理,如果使用sscanf的话,可以先把输入用scanf存入一块缓冲区当中,再用sscanf读取
这样大大减少了工作量。
#include <stdio.h>
int T[100];
int P[100];
int i;
bool Input()
{
int p=0;
char buf[1024];
i=0;
while(scanf("%c",&buf[p])!=EOF)
{
if(buf[p]==10)
{
if(p==0)return 1;
sscanf(buf,"%d %d",&T[i],&P[i]);
i++;
p=-1;
}
p++;
}
return 0;
}
void output()
{
int j;
for(j=0;j<i;j++)
{
printf("%d %d\n",T[j],P[j]);
}
printf("\n");
}
int main()
{
while(Input())output();
return 0;
}
5.sscanf用于分析字符串
sscanf可以支持格式字符%[] 这为分析字符串提供了很大方便(其实scanf也支持%[])
先看一下%[] 格式:
(1)-: 表示范围,如:%[1-9]表示只读取1-9这几个数字 %[a-z]表示只读取a-z小写字母,类似地 %[A-Z]
只读取大写字母
(2)^: 表示不取,如:%[^1]表示读取除'1'以外的所有字符 %[^/]表示除/以外的所有字符
(3),: 范围可以用","相连接 如%[1-9,a-z]表示同时取1-9数字和a-z小写字母
(4)原则:从第一个在指定范围内的数字开始读取,到第一个不在范围内的数字结束%s 可以看成%[] 的一
个特例 %[^ ](注意^后面有一个空格!)
这样使用sscanf+%[]可以轻松的分析字符串,很多字符串问题便迎刃而解了。
以hrbeu3001为例(不是完整代码,没有要求的格式)
只需2个sscanf函数,就能完成题目的要求,代码非常简洁。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char buf[1024],str1[100],str2[100],str3[100],str4[100],temp[100]="<default>";
int count;
scanf("%d",&count);
while(count--)
{
str1[0]='\0';
str2[0]='\0';
str3[0]='\0';
str4[0]='\0';
scanf("%s",buf);
sscanf(buf,"%[^:]://%[^:,/]:%[,1-9]",str1,str2,str3,str4);
sscanf(buf,"%[^:]://%[^:,/]/%[a-z,A-Z,/,~]",str1,str2,str4);
if(str3[0]=='\0')strcpy(str3,temp);
if(str4[0]=='\0')strcpy(str4,temp);
printf("%s\n%s\n%s\n%s\n",str1,str2,str3,str4);
}
return 0;
}
sscanf和sprintf是scanf和printf家族用法 (转)的更多相关文章
- scanf与printf用法详解
一.scanf家族 1.scanf家族的原型 int scanf(char const *format,...); int fscanf(FILE *stream,char const *format ...
- C++中几种输入输出cin、cin.getline()、getline()、sscanf()、sprintf()、gets()等
1.cin和cout cout是输出流对象的名字,cin是输入流对象的名字 ,“<<”是流插入运算符(也可称流插入操作符〉,作用是将需要输出的内容插入到输出流中,默认的输出设备是显示器. ...
- sscanf,sprintf 通过字符串与其它类型进行方便快捷的输入和输出
http://c.biancheng.net/cpp/html/296.html 头文件:#include <stdio.h> sscanf()函数用于从字符串中读取指定格式的数据,其原型 ...
- C语言sscanf和sprintf输入输出使用及Strlen、Memset解释
sscanf() - 从一个字符串中读进与指定格式相符的数据. swscanf()- 用于处理宽字符字符串,和sscanf功能相同 通过学习和使用个人认为,在字符串格式不是很复杂,但是也并不 ...
- sscanf及sprintf
在程序中,我们肯定会遇到许多处理字符串的操作,当然C++中的string类已经做了很好了,但是也不要忘了C中的sscanf和sprintf 这两个函数用法跟printf和scanf用法很相似,只不过数 ...
- kernel 中 sscanf和sprintf()函数使用说明【转】
转自:http://blog.csdn.net/tommy_wxie/article/details/8480695 在将各种类型的数据构造成字符串时,sprintf 的强大功能很少会让你失望.由于s ...
- php中sprintf与printf函数用法区别
下面是一个示例:四舍五入保留小数点后两位 代码如下 复制代码 <?php$num1 = 21;echo sprintf("%0.2f",$num1)."<b ...
- printf家族探秘
有一个函数,是我们从学习c语言就开始的第一天就接触的,那就是printf函数,可是这个家族的函数,带给我们的便利却不是一点半点,所以写一篇用法总结. 1.printf函数 格式化输出,可以输出八进制, ...
- C语言中最常用的三种输入输出函数scanf()、printf()、getchar()和putchar()
本文给大家介绍C语言中最常用的三种输入输出函数scanf().printf().getchar()和putchar(). 一.scanf()函数格式化输入函数scanf()的功能是从键盘上输入数据,该 ...
随机推荐
- 让IE6IE7IE8支持CSS3属性的8种方法介绍
我们都知道,IE浏览器暂不支持CSS3的一些属性.国外的工程师们,不安于此现状,他们总是尽量使用一些手段使IE浏览器也能支持CSS3属性,我觉得这些都是很有意义,很有价值的工作,可以推动整个技术领域的 ...
- .hpp文件
hpp在C++中的含义 以前在开源代码里面遇到过,今天看boost源码的时候又遇到了,故学习一下. hPP,计算机术语,用C/C++语言编写的头文件,通常用来定义数据类型,声明变量.函数.结构和类.而 ...
- js数组依据下标删除元素
最近在项目中遇到了一些问题,基础性的东西记得不牢固,就总结一下放在这里备再次查找,对操作js数组的一些问题一些常用的记录! 1.创建数组 var array = new Array(); var ar ...
- javascript对象事件绑定方法
javascript对象事件绑定方法 今天在做对象事件绑定的过程中出现了一点异外情况,由于事件方法是由参数传过来的,需要将当前对象call过去,方便方法体里直接调用this 错误写法 obj.oncl ...
- js中ajax如何解决跨域请求
js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操 ...
- Rxjava, RxAndroid, Retrofit 等库的使用
RxJava的基本用法: 关于 unSubscribe() 的调用问题: There is no need to unsubscribe in onCompleted. Take a look at ...
- Jquery 操作页面中iframe自动跟随窗口大小变化,而页面不出现滚动条,只在iframe内部出滚动条
很多时候大家需要iframe自适应所加载的页面高度而不要iframe滚动条,但是这次我需要的是页面不需要滚动条而iframe要滚动条,且iframe自动跟随窗口大小变化.自适应页面大小.下面是代码,下 ...
- c++builder Color
procedure ExtractRGB(const Color: Graphics.TColor; out Red, Green, Blue: Byte); var RGB: Windows.TCo ...
- QueryInterface
QueryInterface IUnknown *p2; hr = pInnerUnknown->QueryInterface(vGUID2, (void**)&p2); IUnknow ...
- 如果Apache Spark集群中没有分布式系统,则会?
若当连接到Spark的master之后,若集群中没有分布式文件系统,Spark会在集群中每一台机器上加载数据,所以要确保Spark集群中每个节点上都有完整数据. 通常可以选择把数据放到HDFS.S3或 ...