c++中sscanf函数与sprintf函数的用法

c++中sscanf函数与sprintf函数的用法,第1张

一.sscanf 读取格式化的字符串中的数据

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读出个“空”来——这真叫“无中生有”!给你个思路:写个函数一个数据一个数据读,当遇到两个或多个连续逗号时在两个逗号间给接收变量附加一个“空”。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/12098492.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-21
下一篇2023-05-21

发表评论

登录后才能评论

评论列表(0条)

    保存