虽然不是新行

时间:2014-01-13 01:20:04

标签: c++ file newline fstream

如果我有像

这样的文件
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现在可以和我一起使用了 任何想法?

2 个答案:

答案 0 :(得分:1)

您可以std::getlinestd::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();
}