在 C++
中是否有函数可以用来获取文件总行数,还是必须手动使用 for
循环来完成?
#include <iostream>
#include <ifstream>
ifstream aFile ("text.txt");
if (aFile.good()) {
//how do i get total file line number?
}
text.txt
line1
line2
line3
我会这样做:
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');
没有这样的功能。可以通过读取整行来进行计数。
std::ifstream f("text.txt");
std::string line;
long i;
for (i = 0; std::getline(f, line); ++i)
;
i
必须在for
之外声明,如果您想在循环后访问它。
std::ifstream f("text.txt");
char c;
long i = 0;
while (f.get(c))
if (c == '\n')
++i;
operator>>()
会跳过空格。谢谢提醒,已修复。 - Olaf Dietsche我害怕你需要像这样自己写:
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;
有一个计数器,初始化为零。逐行读取内容,同时增加计数器(实际行内容无关紧要且可丢弃)。完成后,如果没有错误,计数器就是行数。
或者你可以将整个文件读入内存,在文本“数据”中计算换行符以得到行数。
stackoverflow.com/a/19140230/9564035中的解决方案很好,但不能提供相同的输出。
如果您只想计算以'\n'
结尾的行,请使用
#include<algorithm>
#include<iterator>
//...
ifstream aFile ("text.txt");
lines_count=std::count(std::istreambuf_iterator<char>(File),
std::istreambuf_iterator<char>(), '\n');
'\n'
(最后一行)结尾的行数,您应该使用getLine解决方案。ifstream aFile ("text.txt");
std::size_t lines_count =0;
std::string line;
while (std::getline(aFile , line))
++lines_count;
file.seekg(std::ios_base::beg);
。比如 P0W 的解决方案,比上述方案更快速,每 100mb 可以节省 3-4 秒。
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;
只需复制并运行。
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
int main()
{
fstream file;
string filename = "sample input.txt";
file.open(filename.c_str()); //read file as string
int lineNum = 0;
string s;
if (file.is_open())
{
while (file.good())
{
getline(file, s);
lineNum++;
cout << "The length of line number " << lineNum << " is: " << s.length() << endl;
}
cout << "Total Line : " << lineNum << endl;
file.close();
}
return 0;
}
#include <bits/stdc++.h>
,你不太可能得到任何点赞。 - Adrian Mole
std::count
变体函数。 - Some programmer dude