如何从输入文件中查找未知数量的行和列?

时间:2014-02-25 00:27:21

标签: c++ file-io

因此输入文件看起来与此类似,它可以是任意的......:

000001000101000
010100101010000
101010000100000

在我开始将文件读入2d数组之前,我需要能够找到输入文件中有多少行和列,我不知道这是否是正确的方法:

char c;
fin.get(c);
COLS = 0;

while ( c != '\n' && c != ' ')
{
    fin.get(c);
    ++COLS;
}

cout << "There are " << COLS << " columns in this text file" << endl;


ROWS = 1;
string line;
while ( getline( fin, line ))
    ++ROWS;


cout << "There are " << ROWS << " rows in this text file" << endl;

如果这不是正确的方法,或者有更简单的方法,请帮助我。

我也不能使用字符串库

2 个答案:

答案 0 :(得分:3)

如果您使用std::stringstd::vector,则此问题变得微不足道:

std::istream_iterator<std::string> start(fin); // fin is your std::ifstream instance
std::istream_iterator<std::string> end;
std::vector<std::string> lines(start, end);

由于每一行都不包含空格,因此向量将保存所有行。假设每一行的宽度相同,每个字符串应该具有相同的长度(您可以通过迭代向量并检查长度来检查这一点)。

答案 1 :(得分:0)

我们可以通过这种方式更快地阅读:

// get length of file:
fin.seekg (0, is.end);
int fileSize = fin.tellg();
fin.seekg (0, fin.beg);

std::string s;
if( getline( fin, s)) {
  cols = s.size();
  rows = fileSize/(cols+1);  // cols+1 to count also '\n' at the end of each line
}