如何在不使用字符串类的情况下逐行读取文件?

时间:2015-11-27 06:09:28

标签: c++

所以在我的c ++类中,我们现在不允许使用字符串类。要替换字符串,我们使用的是字符数组。

分配要求我从包含每行句子的文件中读取。该文件的第一行是一个整数,表示文件中有多少行。 我的第一个问题是将整数读入变量并在数组中使用该变量会导致错误,表明变量必须是常量。 我怎么能过去呢?我需要一个2D数组来计算每个句子有多少个字符。我想将我的数组初始化为char FileSentences[numberOfLines][81]。已经确定句子字符上限为80个字符,因此每行的宽度必须为81才能占据\ 0。

我的第二个问题来自于我如何读取整数。由于文件中的第一行是整数,我读它就像:

int numberOfLines;
ifstream fin;
fin.open("TestTextFile.txt");
fin >> numberOfLines;

这有效,它将变量numberOfLines设置为正确的值。但是,当我打电话给fin.getline时,接下来要读的是空白。如果我再次呼叫fin.getline,则它是该文件的第一句话。是否有另一种方法来读取整数以防止这种情况,或者我应该在内存中设置一个空白句子来保存第一个fin.getline值然后继续读入我的数组中的句子?

2 个答案:

答案 0 :(得分:0)

  

我需要一个2D数组来计算每个句子有多少个字符。一世   想要将我的数组初始化为char FileSentences [numberOfLines] [81]。

简单的解决方案是分配您需要的东西:

typedef char LINE[81];
LINE* FileSentences = new LINE[numberOfLines];

完成对FileSentences的迭代后,按如下方式释放内存:

delete [] FileSentences;

答案 1 :(得分:0)

对于第一个问题,请使用std::vector

// Define a typedef for a line.
typedef char Line[81];

// Read the number of lines.
fin >> numberOfLines;

// Define a vector for the lines.
std::vector<Line> lines(numberOfLines);

对于第二个问题,请使用ifstream::ignore()忽略该行的其余部分。

fin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

确保添加

#include <limits>

使用std::numeric_limits