如何在C++中读取文本文件

How to read from a text file in C++?

本文关键字:读取 取文本 文件 C++      更新时间:2023-10-16

我正在尝试从文本文件中读取一组字符串,并将这些字符保存在2D数组中。以下是我的代码:

char** fileReader(char* fileName){
    ifstream treeFile;
    treeFile.open(fileName);
    string line;
    vector<string> fileContents;
    int rows=0, columns=0;

    while (getline(treeFile, line )){
        fileContents.push_back(line);
        rows++;
    }
    columns = fileContents.at(0).length();
    char** fileContentsArr;
    fileContentsArr = new char*[rows];
    for (int x=0; x <  rows; x++){
        fileContentsArr[x] = new char[columns];
        for (int y=0; y < columns; y++){
            fileContentsArr[x][y]= fileContents.at(x)[y];
        }
    }
    treeFile.close();
    return fileContentsArr;
}

输出应为:

TTTTTTTT
TTTTTTTT
TTTTFFFT
TTTTTTFF
FFFFTTFF
FFFFTTFF
FFFFTTTT
FFFFTTTF

但相反,我只得到每行中的前7个字符,只得到前7个字符串。

实际输出:

TTTTTTT
TTTTTTT
TTTTFFF
TTTTTTF
FFFFTTF
FFFFTTF
FFFFTTT

我做错了什么?

您可以使用STL在这里完成几乎所有需要的操作:

vector<string> fileReader(char* fileName){
    ifstream treeFile(fileName);
    vector<string> fileContents(
        (std::istream_iterator<string>(treeFile)),
        std::istream_iterator<string>());
    return fileContents;
}

这使用它的两个迭代器构造函数创建向量,第一个迭代程序从treeFile读取并生成strings。第二个迭代者(默认构造)表示文件的结束。

固定版本:

// Changed return type:
std::vector<std::string> fileReader(char* fileName){
  ifstream treeFile;
  treeFile.open(fileName);
  string line;
  std::vector<std::string>  fileContents;
  /// int rows=0, columns=0;
  while (getline(treeFile, line )){
      fileContents.push_back(line);
      rows++;
  }
  // Cut off rest of code, instead:
  return fileContents;
}

如果你想访问一个字符,你可以使用

std::vector<std::string> data = fileReader("file.txt");
char value = data[3][2];

如预期。