2014-01-13 87 views
1

,如果我有一個像雖然不是新的生產線

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

注:我試圖在(輸入>> NUM)和函數getline現在將我 任何工作思路?

+0

什麼是「輸入」? –

+2

如果你想讀線條,你最好的選擇就是getline。請注意['while(!eof())'是錯誤的。](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – chris

+0

因爲它看起來你正在逐個遍歷每一個字符,你可能會發現''\ n「'是新行的'CHAR'是有幫助的。 – Alexander

回答

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

您的輸入無法使用!使用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(); 
}