输入输出和格式化¶
多组 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,这个结束符也会被忽略