2013-10-02 28 views
5

是否有一個函數可用於獲取文件行總數C++,還是必須由for循環手動完成?C++獲取文件行總數

#include <iostream> 
#include <ifstream> 

ifstream aFile ("text.txt"); 
if (aFile.good()) { 
//how do i get total file line number? 

} 

的text.txt

line1 
line2 
line3 

回答

9

沒有這樣的功能。計數可以通過閱讀整行

std::ifstream f("text.txt"); 
std::string line; 
for (int i = 0; std::getline(f, line); ++i) 
    ; 

或通過讀取字符明智和檢查換行

std::ifstream f("text.txt"); 
char c; 
int i = 0; 
while (f.get(c)) 
    if (c == '\n') 
     ++i; 
+0

我得到了0爲第二個功能 – NewFile

+0

第一個作品:) – NewFile

+0

@NewFile你說得對,'operator >>()'當然會跳過空格。謝謝,修正。 –

1

有一個計數器,初始化爲零。在增加計數器的同時逐行讀取線條(線條的實際內容不感興趣並且可以丟棄)。完成後,沒有錯誤,計數器就是行數。

或者您可以將所有文件讀入內存,並在大數據文本「數據」中計算換行符。

11

我會做這樣的:

ifstream aFile ("text.txt"); 
    std::size_t lines_count =0; 
    std::string line; 
    while (std::getline(aFile , line)) 
     ++lines_count; 

或者乾脆,

#include<algorithm> 
    #include<iterator> 
    //... 
    lines_count=std::count(std::istreambuf_iterator<char>(aFile), 
      std::istreambuf_iterator<char>(), '\n'); 
+1

in「while(std :: getline(aFile,line))」什麼是行? – NewFile

+0

@NewFile更新 – P0W

+5

+1 [[std :: count]](http://en.cppreference.com/w/cpp/algorithm/count)變體。 –

2

我怕你需要自己這樣寫的:

int number_of_lines = 0; 
std::string line; 
while (std::getline(myfile, line)) 
     ++number_of_lines; 

std::cout << "Number of lines in text file: " << number_of_lines; 
0

快捷的方式,然後像上面這樣P0W一個解決方案來完成 節省3-4秒每100MB

std::ifstream myfile("example.txt"); 

// new lines will be skipped unless we stop it from happening:  
myfile.unsetf(std::ios_base::skipws); 

// count the newlines with an algorithm specialized for counting: 
unsigned line_count = std::count(
    std::istream_iterator<char>(myfile), 
    std::istream_iterator<char>(), 
    '\n'); 

std::cout << "Lines: " << line_count << "\n"; 
return 0; 
+0

使用istreambuf_iterator代替istream_iterator可以使我的實驗快5倍。 – gus3001