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()的功能是从键盘上输入数据,该 ...
随机推荐
- Appium过程中用到的adb点滴知识库
一.认识abd adb是什么? adb的全称为Android Debug Bridge,就是起到调试桥的作用.通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是d ...
- bzoj1193
#include<cstdio> #include<cstdlib> #include<algorithm> #include<queue> using ...
- 从高铁G18中高端如厕看12306的验证码
1.引子 最近疯狂的吐槽12306网站的虐心验证码. 从对铁老大的一贯作风来说,这个事不过是芝麻绿豆的事情.这个事件只是因为发生在网络上,而引起了广大网民的一致谴责而已. 相信更丰富的如厕经历,大家只 ...
- css:outline
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- 【Python学习笔记】循环和迭代
for和while基本语法 break和continue else的使用 enumerate和zip在循环中的应用 for和while基本语法 Python中的的循环使用for和while语句来实现, ...
- Android Audio遇到播放无声时的分析
在Android Audio开发过程中,有遇到播放ringtone时无声,但播放Music可以听到声音,关于无声问题的分析,在此做个笔记,方便以后回顾. 分析方向: 1:在音量控制面板中确认该音频流对 ...
- junit4新框架hamcrest
Hamcrest是一个书写匹配器对象时允许直接定义匹配规则的框架.有大量的匹配器是侵入式的,例如UI验证或者数据过滤,但是匹配对象在书写灵活的测试是最常用.本教程将告诉你如何使用Hamcrest进行单 ...
- 《学习OpenCV》练习题第四章第八题ab
这道题是利用OpenCV例子程序里自带的人脸检测程序,做点图像的复制操作以及alpha融合. 说明:人脸检测的程序我参照了网上现有的例子程序,没有用我用的OpenCV版本(2.4.5)的facedet ...
- 谈FTP服务器攻击技术及其展望 (下)
上篇回顾:谈FTP服务器攻击技术及其展望 (上)http://chenguang.blog.51cto.com/350944/436876 本文出自 "李晨光原创技术博 ...
- 一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库 RxJava,相当好
https://github.com/ReactiveX/RxJava https://github.com/ReactiveX/RxAndroid RX (Reactive Extensions,响 ...