如何从C ++中的文本文件中读取?

时间:2015-12-18 10:15:05

标签: c++ file-io

我正在尝试从文本文件中读取一堆字符串并将字符保存在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

我做错了什么?

2 个答案:

答案 0 :(得分:3)

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

vector<string> fileReader(char* fileName){
    ifstream treeFile(fileName);

    vector<string> fileContents(
        (std::istream_iterator<string>(treeFile)),
        std::istream_iterator<string>());

    return fileContents;
}

这将使用其双迭代器构造函数创建向量,第一个迭代器从treeFile读取并生成string s。第二个迭代器(默认构造)表示文件的结尾。

答案 1 :(得分:1)

修正版:

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

如果您想访问某个角色,可以使用

{{1}}

按预期。