虽然不是新行

While not new line

本文关键字:新行      更新时间:2023-10-16

>如果我有一个像这样的文件

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();
}

注意:我尝试了(input>>num)和getline现在将与我一起工作有什么想法吗?

您的输入不起作用!使用 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();
}
您可以将

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
} 

有关如何逐行读取文件的进一步参考,请参阅这篇文章。