如果我有像
这样的文件1 5 6 9 7 1
2 5 4 3 8 9
3 4 3 2 1 6
4 1 3 6 5 4
我希望对每一行中的数字进行排序.. 怎么知道什么时候换行? 代码例如:
while (!input.eof) {
input>>num;
while (not new line ?){
input>>o;
b.push_back(o);
}
sort (b.begin(),b.end());
se=b.size();
output<<num<<" "<<b[se-1]<<endl;
b.clear();
}
注意:我试过while(输入&gt;&gt; num),getline现在可以和我一起使用了 任何想法?
答案 0 :(得分:1)
您可以std::getline
与std::istringstream
一起使用逐行读取文件,然后分别处理每一行:
#include <sstream>
std::string line;
while (std::getline(infile, line))
{
std::istringstream iss(line);
int a, b;
//You can now read the numbers in the current line from iss
}
有关如何逐行阅读文件的进一步参考,请参阅this post。
答案 1 :(得分:1)
您的输入无效!使用stream.eof()
的循环测试作为输入的唯一控制总是错误的。在尝试阅读后,您始终需要测试输入。顺便说一下,我之前发布了如何保证对象之间没有换行符。使用std::getline()
作为第一阶段已经有了答案,这有点无聊。这是另一种方法:
std::istream& noeol(std::istream& in) {
for (int c; (c = in.peek()) != std::char_traits<char>::eof()
&& std::isspace(c); in.get()) {
if (c == '\n') {
in.setstate(std::ios_base::failbit);
}
}
return in;
}
// ...
while (input >> num) {
do {
b.push_back(num);
} while (input >> noeol >> num);
std::sort (b.begin(),b.end());
se=b.size();
output<<num<<" "<<b[se-1]<<endl;
b.clear();
input.clear();
}