sscanf 和 sprintf

首先,两者均在头文件cstdio之下

 

scanf就是把screen的内容以%d的形式传输到n中(即从左往右),而printf则是把n以%d的形式传输到screen中(从右往左

sscanf和sprintf与上面格式相同,但是需要把screen换成字符数组

 

例子:

char str[100];
sscanf(str,"%d",&n);
sprintf(str,"%d",n);

 上面sscanf是把字符数组中的内容以%d的格式写入n(从左往右)

 

来看一个具体的例子:(注意birth字符串得用char数组表示,string表示会报错)

cin>>n;
for(int i=0;i<n;i++){
    cin>>name>>birth;
    sscanf(birth,"%d/%d/%d",&y,&m,&d);
    cout<<y<<" "<<m<<" "<<d<<" "<<endl;
}

输入:

5
John 2001/05/12
Tom 1814/09/06
Ann 2121/01/30
James 1814/09/05
Steve 1967/11/20

输出:

2001 5 12 
1814 9 6 
2121 1 30 
1814 9 5 
1967 11 20 

 

来看更复杂的例子:

const char *s = "http://www.baidu.com:1234";
char protocol[32] = { 0 };
char host[128] = { 0 };
char port[8] = { 0 };
sscanf(s,"%[^:]://%[^:]:%[1-9]",protocol,host,port);
printf("protocol: %s\n",protocol);
printf("host: %s\n",host);
printf("port: %s\n",port);

 

例子:

char data[50],data1[50];
sscanf("123  456","%[0-9]  %[0-9]",&data,&data1);
cout<<data<<" "<<data1;

 

sscanf可以支持格式字符%[]:

(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 可以看成%[] 的一个特例 %[^ ](注意^后面有一个空格!)

 

引用:https://www.cnblogs.com/Anker/p/3351168.html/https://blog.csdn.net/weixin_42240667/article/details/105715597

 

posted @   Yohoc  阅读(111)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示