【问题标题】:Reading matrix from a text file to 2D integer array C++从文本文件中读取矩阵到二维整数数组 C++
【发布时间】:2013-03-13 09:34:48
【问题描述】:
1 3 0 2 4 
0 4 1 3 2 
3 1 4 2 0 
1 4 3 0 2 
3 0 2 4 1 
3 2 4 0 1 
0 2 4 1 3

我在 .txt 文件中有一个这样的矩阵。现在,如何以最佳方式将此数据读入int** 类型的二维数组?我搜索了整个网络,但找不到令人满意的答案。

array_2d = new int*[5];
        for(int i = 0; i < 5; i++)
            array_2d[i] = new int[7];

        ifstream file_h(FILE_NAME_H);

        //what do do here?

        file_h.close();

【问题讨论】:

    标签: c++ arrays file matrix


    【解决方案1】:

    首先,我认为您应该创建一个大小为 7 的 int*[] 并在循环内初始化一个 5 的 int 数组时从 1 循环到 7。

    在这种情况下,你会这样做:

    array_2d = new int*[7];
    
    ifstream file(FILE_NAME_H);
    
    for (unsigned int i = 0; i < 7; i++) {
        array_2d[i] = new int[5];
    
        for (unsigned int j = 0; j < 5; j++) {
            file >> array_2d[i][j];
        }
    }
    

    编辑(经过相当长的时间):
    或者,我建议使用vectorarray

    std::array<std::array<int, 5>, 7> data;
    std::ifstream file(FILE_NAME_H);
    
    for (int i = 0; i < 7; ++i) {
        for (int j = 0; j < 5; ++j) {
            file >> data[i][j];
        }
    }
    

    【讨论】:

    • 非常感谢。 " file >> array_2d[i][j]; " 这行是我一直要求的。
    • @burakongun 添加到 Magtheridon 的评论中,数组应该是结构化的(7 x 5)是因为文件中数组的顺序是按行号,然后在每行上按整数(这逻辑上匹配文件的读入顺序)。如果您使用原始结构并使用“file >> array2d[i][j]”从 i=(0 到 4) 和 j=(0 到 6) 循环,您将无法获得原始数组的正确表示。您将获得 {{1,3,0,2,4,0,4},{1,3,2,3,1,4,2},{0,1,4,3,0,2, 3},{0,2,4,1,3,2,4},{0,1,0,2,4,1,3}} 这不是您问题中二维数组的有效表示。
    【解决方案2】:
    for (int i = 0; i < n; i++) {
     for (int j = 0; j < n; j++) {
        int n;
        fscanf(pFile, "%d", &n);
        printf("(%d,%d) = %d\n", i, j, n);
        array[i][j] = n;
    }
    

    希望对你有所帮助。

    【讨论】:

    • -1 for:完全奇怪的谷歌链接,这应该是一个评论,并且回答本身应该包含有用的建议。
    • 这些对于我实际需要的东西来说太复杂了。不过还是谢谢。
    • 很抱歉我的回复晚了。
    猜你喜欢
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    相关资源
    最近更新 更多