从C中的文件解析二维矩阵

时间:2013-02-18 00:57:42

标签: c

我是C编程的新手,正在寻找解决问题的编程方法。作为我的第一个编程软件,我尝试从文本文件中读取二维矩阵并将其存储在数组中。我的目的是比较字符串中的数字,用于图表中的旧式最短路径算法。

首先,我有一种读取每一行的方法,用fscanf解析它并将每一行存储在一个带有strcpy的二维数组中。虽然我设法在一个循环中使用fprint将它放在显示器上,但似乎在一个[] [] - 矩阵中复制几个[] -rows的结构不可行。编译器给我带来了令人讨厌的评论,例如关于strcpy的“使用不兼容的指针类型转移参数2”。洞的想法在C中似乎是一个不可行的死胡同。

那么有没有人知道如何从文件中读取矩阵并将其放在统一的字符串数组中以进行值的比较?指针,结构,什么?一个很好的解决方案是在矩阵中读取几个浮点变量的可能性。

也许你们中有些经验丰富的人有想法?

谢谢! Threx

3 个答案:

答案 0 :(得分:0)

这取决于文本文件的结构方式。如果文件中的所有数字都是这样的

11223344
44556677

然后你可以使用像

这样的东西
#include <stdio.h>
#include <string.h>    

char *charbuffer, ROWS, COLS;
char matrix[ROWS][COLS]
for (row = 0; row < ROWS; row++) {
    for (col = 0; col < COLS; col++) {
        if (fgets(charbuffer, 3, file)) {
            matrix[row][col] = strdup(charbuffer);
        }
    }
}

其中fgets(buffer, n, file)一次从n - 1获得file个字符,并将n个字符保存到buffer(该额外字符是终止{{1}的字符串})。在这种特殊情况下,第一次迭代将获得\0,将11保存到缓冲区并将其复制到缓冲区。

确保您了解differences between strcpy and strdup。上面的循环会失败并用11\0 s填充矩阵。

如果您的文件具有不同的结构,则可以使用77等适当的函数替换fgets

修改fscanf是POSIX功能。如果您碰巧使用Windows或没有可用的功能,您可以使用:

strdup

答案 1 :(得分:0)

将矩阵转换为字符串,将其作为字符串传递,并在将字符串作为参数发送的函数中,将拆分SPLIT返回到数组中。

修改

哎呀请忽略我的想法,因为我没有阅读完整的问题。

答案 2 :(得分:0)

您是否尝试过仅将矩阵用于一维数组?

只需一点数学,您就可以阅读每个条目,例如: matrix[i * columns + j] 为您提供i行和j列上的元素。