是否有一個函數可用於獲取文件行總數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
是否有一個函數可用於獲取文件行總數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
沒有這樣的功能。計數可以通過閱讀整行
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;
有一個計數器,初始化爲零。在增加計數器的同時逐行讀取線條(線條的實際內容不感興趣並且可以丟棄)。完成後,沒有錯誤,計數器就是行數。
或者您可以將所有文件讀入內存,並在大數據文本「數據」中計算換行符。
我會做這樣的:
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');
我怕你需要自己這樣寫的:
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;
快捷的方式,然後像上面這樣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;
使用istreambuf_iterator代替istream_iterator可以使我的實驗快5倍。 – gus3001
我得到了0爲第二個功能 – NewFile
第一個作品:) – NewFile
@NewFile你說得對,'operator >>()'當然會跳過空格。謝謝,修正。 –