逐行处理标准输入
Process from standard input line by line
给出这样的问题:
从整数列表中找出最小值和最大值。有 T 个测试用例,对于每个测试,打印编号。当前测试用例的数量和答案。
Input.txt 文件
3
3 4 5 1 2
100 22 3 500 60
18 1000 77 10 300
输出
Test case 1: Max :5, Min :1
Test case 2: Max :500, Min :3
Test case 3: Max :1000, Min :10
在 C++ 中,如何在每个测试用例迭代中只处理来自标准输入的一行。我试过的代码是这样的。
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;
int main() {
freopen("input.txt","r",stdin);
int T;
cin>>T;
for(int i=1; i<=T; ++i) {
vector<int> arrayInt;
int n;
//Should only process one line for each test case
while(cin>>n) {
arrayInt.push_back(n);
}
int max = *max_element(arrayInt.begin(), arrayInt.end());
int min = *min_element(arrayInt.begin(), arrayInt.end());
cout<<"Test case " << i << ": Max :" << max << ", Min :"<< min << "\n";
}
}
我在命令行运行时得到的输出
Test case 1: Max :1000, Min :1
请帮助我修复我的代码。预先感谢您的回答。
In C++, how can I process only one line from standard input in each test case iteration.
std::getline
读取直到找到换行符(这是默认设置,可以使用其他分隔符)。
替换
while(cin>>n) {
arrayInt.push_back(n);
}
有
std::string line;
std::getline(std::cin, line);
std::istringstream linestream{line};
while(linestream >> n) {
arrayInt.push_back(n);
}
另请注意,std::minmax_element
可以一次获得最小值和最大值。
给出这样的问题: 从整数列表中找出最小值和最大值。有 T 个测试用例,对于每个测试,打印编号。当前测试用例的数量和答案。
Input.txt 文件
3
3 4 5 1 2
100 22 3 500 60
18 1000 77 10 300
输出
Test case 1: Max :5, Min :1
Test case 2: Max :500, Min :3
Test case 3: Max :1000, Min :10
在 C++ 中,如何在每个测试用例迭代中只处理来自标准输入的一行。我试过的代码是这样的。
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;
int main() {
freopen("input.txt","r",stdin);
int T;
cin>>T;
for(int i=1; i<=T; ++i) {
vector<int> arrayInt;
int n;
//Should only process one line for each test case
while(cin>>n) {
arrayInt.push_back(n);
}
int max = *max_element(arrayInt.begin(), arrayInt.end());
int min = *min_element(arrayInt.begin(), arrayInt.end());
cout<<"Test case " << i << ": Max :" << max << ", Min :"<< min << "\n";
}
}
我在命令行运行时得到的输出
Test case 1: Max :1000, Min :1
请帮助我修复我的代码。预先感谢您的回答。
In C++, how can I process only one line from standard input in each test case iteration.
std::getline
读取直到找到换行符(这是默认设置,可以使用其他分隔符)。
替换
while(cin>>n) {
arrayInt.push_back(n);
}
有
std::string line;
std::getline(std::cin, line);
std::istringstream linestream{line};
while(linestream >> n) {
arrayInt.push_back(n);
}
另请注意,std::minmax_element
可以一次获得最小值和最大值。