所以有Q行。 每行都有任意数量的整数,并用空格分隔,我需要处理这些数字。
示例输入
Q = 4
12 32 4 3 2
1 2 3 4
0
2 3 1 223 4 2 3
我将每一行读取为字符串,并将数字提取为字符串,然后使用atoi将其转换为int,即
while(Q>0){
for(char c:s){
if (c==' '){
int x = atoi(temp.c_str());
temp = "";
//process x
continue;
}
temp +=c;
}
Q--;
}
当然有更好的方法吗?
编辑:每行的编号处理方式不同。
例如,说
第1行有1,2,3,4。第2行有14,15。
然后1,2,3,4将被不同地处理,而13,14将被不同地处理。
这就是为什么我不能使用std :: cin的原因,因为它忽略了所有空格(空格和换行符)。
答案 0 :(得分:1)
#include <iostream>
// ...
int x;
while (std::cin >> x)
; // process x
编辑后的评论原因:
#include <iostream>
// ...
int x;
char ch;
while (std::cin >> x >> std::noskipws >> ch >> std::skipws) {
if (ch == '\n')
; // process x differently
}
答案 1 :(得分:0)
如果您需要面向行的解析并且仍想使用iostream的功能,那么我建议您使用std::getline
和std::istringstream
。下面的例子
#include <iostream>
#include <sstream>
int main() {
char ch = '\0';
std::cin >> ch;
if (!std::cin || ch != 'Q') return EXIT_FAILURE;
std::cin >> ch;
if (!std::cin || ch != '=') return EXIT_FAILURE;
int Q = 0;
std::cin >> Q;
if (!std::cin) return EXIT_FAILURE;
std::string line;
std::getline(std::cin, line); // get ready for a new line
while (Q > 0) {
if (!std::getline(std::cin, line)) return EXIT_FAILURE;
std::istringstream iss(line);
int count = 0;
int sum = 0;
int i;
while (iss >> i) {
++count;
sum += i;
}
std::cout << "Found " << count << " integers who's sum was " << sum << '\n';
Q--;
}
std::cout << "Done\n";
}