
sscanf和scanf类似,都是用于输入的,只是后者以屏幕为输入源,而前者以固定字符串为输入。
sscanf() 是从一个字符串中读进与指定格式相符的数据
二.sprintf与printf的用法很类似,只不过是前者输出到指定的目标,后者输出到屏幕。
sprintf()指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中。
int scanf(const char format [,agument])
其中format可以是一个或多个
{%[ ][width][{h | l | l64 | L}]}type
{a|b|c}表示a、b、c中选一,[d]表示d是可有可无的。
所以,format形式可以有:
%s
%5s
%[a-z]5d
注意:
%*[width][{h | l | l64 | L}]}type表示过滤满足条件的字符串,不向目标中输出。
1、基本用法,取字符串
string source0 = "1234456"
char str[521]
sscanf(source0.c_str(),"%s",str)
sscanf(source0.c_str(),"%4s",str)
2、转换为整型数
string source0 = "123456"
int x
sscanf(source0.c_str(),"%d",&x)
sscanf(source0.c_str(),"%3d",&x)
3、停止和范围
sscanf(source0,"%[^a]",str) //遇到“a”停止
sscanf(source0,"%[^c]",str) //遇到“c”停止
sscanf(source0,"%[1-9A-Z]",str) //只取范围1-9和A-Z的字符
sscanf(source0,"%[^b-z]",str) //遇到“b-z”停止
sscanf(source0,"%[^c-z]",str) //遇到“c-z”停止
4、格式转换
char source[512] = "2015:8:1"
int a,b,c
sscanf(source,"%d:%d:%d",&a,&b,&c)
注意:这个地方a、b、c必须加引用,否则会报错。
5、复杂情况
char source[512] = "fjkdsjf/123456@fjkdsjf"
char str[512]
sscanf(source,"%*[ /]/%[ @]",str)
结果为:123456
sprintf
sprintf与printf的用法很类似,只不过是前者输出到指定的目标,后者输出到屏幕。
int sprintf(char *buffer,const char *format,...)
举个例子:
结果:
1
buf = 1
buf = 00000001
2
buf = 2
buf = 00000002
sscanf(str,"%[^ ]%[ ]%s",s[0],s[1],s[2]) //关键在这里用的格式。第一个格式是以空格为读的结束
第二个格式是只读空格,遇别的字符 读 结束
第三个格式平时常用,就不多说了。
下面是完整程序,说明怎样读得空格。
假定已知字符串 "abcd 123" 显然有3个空格。
我们要把前后2段字符串读入 s[0],s[2], 中段空格读入s[1].
输出 读到的3个字符串的 长度 和 字符串内容 (用 | 分开,以便你看得清楚)
#include <stdio.h>
main()
{
char str[]="abcd 123"
char s[3][10]
sscanf(str,"%[^ ]%[ ]%s",s[0],s[1],s[2]) //关键在这里用的格式。
printf("%d %d %d\n",strlen(s[0]),strlen(s[1]),strlen(s[2]))
printf("%s|%s|%s\n",s[0],s[1],s[2])
return 0
}
输出为:
4 3 3
abcd| |123
别费脑筋了,另想办法吧!两个逗号间本无数据,你怎么能叫sscanf读出个“空”来——这真叫“无中生有”!给你个思路:写个函数一个数据一个数据读,当遇到两个或多个连续逗号时在两个逗号间给接收变量附加一个“空”。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)