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
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现