在 C++ 的算法题中,如果你不知道输入数据有多少组(即测试用例的数量未知),通常的处理方式是使用 循环读取输入直到文件结束 (EOF)。这类题目常见于在线评测系统(如 LeetCode、牛客网、POJ 等)。
✅ 常见方法:使用 while (cin >> 变量)
或 while (getline(cin, str))
📌 方法 1:适用于每组输入有固定变量的情况
#include <iostream>using namespace std;int main() {int a, b;while (cin >> a >> b) {// 处理每一组输入cout << a + b << endl;}return 0;}
- 这种写法会持续读取输入,直到没有更多输入为止(遇到 EOF 结束循环)。
- 常用于像“多组输入求 a + b”这种题目。
📌 方法 2:按整行读取(适合复杂格式或含空格的输入)
#include <iostream>#include <sstream>using namespace std;int main() {string line;while (getline(cin, line)) {// 每一行 line 是一组输入istringstream iss(line);int a, b;if (iss >> a >> b) {cout << a + b << endl;}}return 0;}
- 使用
getline(cin, line)
来逐行读取; - 再使用
istringstream
解析每一行的数据; - 更灵活,适合输入格式较复杂的题目。
📌 方法 3:读入多个数字的一组数据(比如每组输入是一行多个数)
#include <iostream>#include <vector>using namespace std;int main() {string line;while (getline(cin, line)) {istringstream iss(line);int num;vector<int> nums;while (iss >> num) {nums.push_back(num);}// 处理这一组数据,例如求和int sum = 0;for (int x : nums) sum += x;cout << sum << endl;}return 0;}
小结
场景 | 推荐写法 |
---|---|
每组输入几个固定变量(如 a 和 b) |
|
输入可能包含空格或一整行 |
|
每组输入有多个不确定数量的数字 |
|
补充说明
- 在本地调试时,可以通过输入重定向或手动输入后按下
Ctrl+Z
(Windows)或Ctrl+D
(Linux/macOS)来模拟 EOF。 - 在 OJ 平台上,程序会自动从标准输入读取数据,直到输入结束。