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
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号