输入输出和格式化¶
多组 A+B EOF 形式¶
给定若干组测试数据,读取至文件末尾为止。每组数据有两个整数 \(a\) 和 \(b\) ,请你求出 \(a+b\) 的值。
输入
1 2 114 514 2024 727
输出
3 628 2751
int a, b;
while (cin >> a >> b) { // 注意 while 处理多个 case
cout << a + b << endl;
}
多组带空格的字符串 T 组形式¶
给定 \(t\) 组询问,每次给出一个长度为 \(n\) 的带空格的字符串 \(s\) ,请你去掉空格之后,将其倒置,然后输出。
输入
3 9 one space 11 two spaces 14 three spaces
输出
ecapseno secapsowt secapseerht
int t;
cin >> t;
for (int i = 0; i < t; i++) {
int n;
cin >> n;
cin.ignore(); // 一定要先吃掉上一个换行
string s;
getline(cin, s);
s.erase(std::remove(s.begin(), s.end(), ' '), s.end());
reverse(s.begin(), s.end());
cout << s << endl;
}
格式化输出¶
- 保留 \(3\) 位小数输出,如果小数位数不够则补零,否则四舍五入:
printf("%.3lf", x)
- 保留正整数的 \(9\) 个数位,如果数位小于 \(9\) 个,则补充前导零:
printf("%09d", x)
- C语言printf指定宽度的格式化输出 - 知乎
其他¶
- 字符串转数字:std::stoi, std::stol, std::stoll - cppreference.com
- 流可以转换成
bool
,如果出错了(比如EOF
),结果就是false
,所以可以用while (cin >> a >> b)
一直读到EOF
cin.getline
接收的是char*
类型的 buffer,不能和另外一个std::getline
混淆- 可以用
cin.get()
读取一个字符,返回值类型是int
,可能是EOF
cin.ignore
,第一个参数指定忽略的字符数量,默认是1
;第二个参数指定结束符,默认是EOF
,这个结束符也会被忽略