天梯赛字符处理很多,比如时间,整数与字符互转(+-'0')
格式控制以及输入1e5以上,用scanf和printf、putchar
无空格,连续字符串用cin省事
inline int read()
{
int x = 0;
char c = getchar();
bool flag = 0;
while(c < '0' || c > '9'){if(c == '-')flag = 1;c = getchar();}
while(c >= '0' && c <= '9'){x = (x << 3) + (x << 1) + (c ^ 48);c = getchar();}
return flag ? -x : x;
}
①scanf、printf格式控制
scanf接受空格并停止,cin不接受只作为停止标志!
scanf内,加空格,:
printf控制前加0或小数点保留,和四舍五入的写法
②包括空格,只接受一整行
gets (有些c++版本不支持,c反而支持)
或getline(cin,c), string类型
cin.getline(c,150) 150为数组大小
附: char型空格的处理相当烦人。
如char数组初始化,其实为0不是空格, 古风排版-PTA
两个字符串,前者为空格需要吃掉,A+B 可能AB不合法 -PTA
这道题代码
char a[1005],b[1005];
//cin>>a>>b;//这样如果没法考虑a是空格
scanf("%s",a);
getchar();
cin.getline(b,1005);
③同类型多次输入,消除回车/空格
getchar()消除回车
④读入结束
EOF或cin
⑤对齐方式
#include <bits/stdc++.h>
#include<stdio>
using namespace std;//题目输出可能不唯一!!
int main()
{
int a,b;
scanf("%d:%d",&a,&b);//不接受空格和换行
//getchar();//输入矩阵,cin后面则不用getchar,但出现回车都需要getchar吃回车
string c;
//while(gets(c)!=NULL)
//{
// cout<<c<<endl;
//}
while(getline(cin,c))//接受一行包括空格 区别cin.getline
{
cout<<c<<endl;
}
//while(cin.getline(c,100))
//{
//} //限定字符 ,????
char d[100];
gets(d);//多一个输入消去回车
//for(int i=0;i<c.size();i++)
//gets(d[i]);//不可以
gets(d); //接受回车和空格 ,一行
while(gets(d)!=NULL) //貌似gets只适用于数组
{
cout<<d<<endl;
}
char e;
while((e=getchar())!=EOF)//接受单个字符 ,比scanf(%c)好在于空格不结束输入
//gets(e);
for(int i=0;i<strlen(d);i++)
{
if(d[i]%2==0)cout<<"YES"<<endl;//char也可判断奇偶
d[i]-=48;
d[i]+='0';//转int
}
printf("%0d:%0d",a,b);//补0
}