1.sscanf 从字符串中读取指定格式的数据
(1)sscanf(“1-2-3”,”%d-%d-%d”,&a,&b,&c) 从标准c字符串中按指定格式读取数据。
(2)string s=”1-2-3”;
sscanf(s.c_str(),”%d-%d-%d”,&a,&b,&c) 如果是string类型,需要转换为标准c字符串格式。
#include<cstdio> //sscanf头文件
#include<iostream>
#include<string>
using namespace std;
int main()
{
int y,m,d;
sscanf("2020-12-24","%d-%d-%d",&y,&m,&d);
cout<<y<<' '<<m<<' '<<d;
//输出:2020 12 24
//----------------------------------------------------------------------------
//从string类型数据读取数据时,需要将string类型转换为正规c的字符常量
string s="16:06:47";
int hour,minute,second;
sscanf(s.c_str(),"%d:%d:%d",&hour,&minute,&second);
cout<<hour<<' '<<minute<<' '<<second;
//输出:16 6 47
}
2.像从键盘读入一样从字符串中读入
(1)stringstream sin(s);像cin一样使用,将字符串s当做键盘输入,sin>>x;赋值给变量。
(2)stringstream sout; 像cout一样使用,cout是输出到控制台,sout<<x;是将变量x输出到流中,输出完后可以将流中内容在转换为字符串,以此可以实现各种类型的to_string()函数。
#include<sstream> //包括ostringstream、istringstream、stringstream这三个类
#include<iostream>
using namespace std;
int main()
{
int a[5];
string s="1 2 3 4 5";
stringstream sin(s); //定义一个sin从字符串s中读取数据,像cin一样使用
for(int i=0;i<5;i++)
sin>>a[i];
for(int i=0;i<5;i++)
cout<<a[i]<<' ';
//输出:1 2 3 4 5
//----------------------------------------------------------------------------
int num[5]={6,7,8,9,10};
string ans;
stringstream sout; //定义一个sout流
for(int i=0;i<5;i++)
sout<<num[i]<<'-'; //将数组输出到sout流中
sout<<"wdnmd";
ans=sout.str(); //将sout流转换为字符串并赋值给ans
cout<<ans;
//输出:6-7-8-9-10-wdnmd
}
3.scanf和printf的常用方法
(1)%d 整数
(2)%f 浮点数
(3)%c 单个字符
(4)%s 字符串
(5)%lld long long型变量
(1)scanf按照格式读取数据:
scanf("x=%d,y=%d",&x,&y);
printf("x=%d,y=%d\n",x,y);
//输入:x=5,y=9
//输出:x=5,y=9
(2)printf输出
printf("%5d",260); //输出 260,最小宽度为五位,不足左边补空格
printf("%05d",260); //输出00260,最小宽度为五位,不足左边补0
printf("%.4f",123.456789); //输出123.4567,保留小数点后四位