最紧凑的方式计算行数在在C ++文件
-
22-07-2019 - |
题
什么是计算文件的行数最紧凑的方式? 我需要此信息来创建/初始化的矩阵的数据结构。
后来我不得不再次去通过文件和存储矩阵内的信息。
<强>更新强>基于戴夫宝洁公司。但是,为什么这不能编译? 请注意,该文件可能会非常大。所以我尽量避免使用容器 以节省内存。
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
using namespace std;
int main ( int arg_count, char *arg_vec[] ) {
if (arg_count !=2 ) {
cerr << "expected one argument" << endl;
return EXIT_FAILURE;
}
string line;
ifstream myfile (arg_vec[1]);
FILE *f=fopen(myfile,"rb");
int c=0,b;
while ((b=fgetc(f))!=EOF) c+=(b==10)?1:0;
fseek(f,0,SEEK_SET);
return 0;
}
解决方案
FILE *f=fopen(filename,"rb");
int c=0,b;while ((b=fgetc(f))!=EOF) c+=(b==10)?1:0;fseek(f,0,SEEK_SET);
答案在C。 那种紧凑的?
其他提示
我认为这可能做...
std::ifstream file(f);
int n = std::count(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>(), '\n') + 1;
如果你需要“再回去”的原因是因为你不能继续无大小,尝试重新订购您的设置。
即,通过文件读,存储在std::vector<string>
或东西的每一行。然后,你必须的大小,与该文件中的行沿着:
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
int main(void)
{
std::fstream file("main.cpp");
std::vector<std::string> fileData;
// read in each line
std::string dummy;
while (getline(file, dummy))
{
fileData.push_back(dummy);
}
// and size is available, along with the file
// being in memory (faster than hard drive)
size_t fileLines = fileData.size();
std::cout << "Number of lines: " << fileLines << std::endl;
}
下面是不将容器中的溶液:
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
int main(void)
{
std::fstream file("main.cpp");
size_t fileLines = 0;
// read in each line
std::string dummy;
while (getline(file, dummy))
{
++fileLines;
}
std::cout << "Number of lines: " << fileLines << std::endl;
}
虽然我怀疑这是最有效的方式。这种方法的好处是行存储在存储器中作为你去的能力。
#include <stdlib.h>
int main(void) { system("wc -l plainfile.txt"); }
计数'\n'
的实例的数量。这适用于* nix中(\ n)和DOS / Windows的(\ r \ n)的行尾,而不是老斯库尔MAC(系统9或可能在这之前),它使用的只是\ r。我从来没有见过拿出只是\ r作为行结束的情况下,所以我不会担心它,除非你知道这将是一个问题。
编辑:如果您的输入不是ASCII,那么你可能会遇到的问题编码以及。什么是你输入什么样子的?
不隶属于 StackOverflow