一、字符串输入
1.注意getline里面的ss只能是string类型
getline(cin,ss,'.');
//输入一行以”.”结束。不包含”.”
getline(cin,ss);
//一行行读入。默认以转行结束,不会跳过中间的空格
2.输入“我是1的baba”,使a得到1
int a;string ss;
getline(cin,ss);
sscanf(ss.c_str(),"我是%d的baba",&a);
//注意是string.c_str(),#include<string>
cout<<a<<endl; //输出1
3.当getline 前有cin、scanf时
https://www.acwing.com/problem/content/1233/
1.在后续需要使用getline
读入一整行时,若是前面是使用getchar()
、cin
这类读入了一个字母,但是没有读入后续换行 \n 符号或者空格的输入时,再接getline()就容易出现问题。
2.但是连续的 getline 之间没有影响!!!
scanf("%d", &n);
string line;
getline(cin, line);
//这时就需要忽略掉第一行的回车
二、控制精度输出
1.记得#include<iomanip>
double a=3.145561;
cout<<fixed
<<setprecision(2)
<<a<<endl; //输出2位小数点;四舍五入
2.注意是取整!结果是整数
使用函数
#include<cmath\>
double a=1.5;
cout<<ceil(a)
<<endl; // 2(天花板)向上取整
cout<<floor(a)
<<endl; // 1(地板)向下取整
cout<<round(a)
<<endl; // 2 四舍五入
不使用函数
cout<<(int)a
<<endl; // 1 向下取整
cout<<(a>(int)a?(int)a+1:(int)a)<<endl; // 2 向上取整
cout<<(int)(a+0.5)
<<endl;// 2 四舍五入
3.f float,lf double,Lf long double
long double a; printf("%.16Lf",a);
//这里输出long double
以16位精度。且记得要用Lf
!!!
"%02d"
输出2位,不足两位在前面补 0 **;如 2 输出成 02
"%.4f"
输出4位小数点
三、string 相关操作
string s;
s.substr
(开始位置,个数); 截取字符串
char *p= s.c_str()
; 字符串——>字符数组
四、字符数组输入存储,长度计算
kmp所用的字符串下标从1开始,可以用char数组存。
char s[N];
-
输入时
scanf("%s",s+1)
-
算长度时 int lens=
strlen(s+1)
-
if(
s[1]=='#'&&s[2]=='\0'
)return 0; // ‘\0’指null
输入数据为多组数据,最后一行为 # 字符时结束。
注意:这个 # 应为单个字符。若某字符串开头有 #,不意味着读入结束!
https://www.acwing.com/problem/content/submission/code_detail/12794005/