-1

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

首先,我有一种读取每一行的方法,用 fscanf 解析它,然后用 strcpy 将每一行存储在一个二维数组中。尽管我设法在循环中使用 fprint 将其显示在显示器上,但在一个 [][]-矩阵中复制多个 []-行似乎存在结构上的不可行性。编译器用一些讨厌的评论来折磨我,比如关于 strcpy. 在 C 中,洞的想法似乎是一个不可行的死胡同。

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

也许你们中的一些更有经验的人有一个想法?

谢谢!Threx

4

3 回答 3

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);
        }
    }
}

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

确保您了解 和之间的区别strcpystrdup。上面的循环将失败并用 s 填充您的矩阵77

如果您的文件具有不同的结构,您可以将 替换为fgets适当的函数,例如fscanf.

编辑strdup是一个 POSIX 函数。如果您碰巧使用的是 Windows 或没有可用的功能,您可以使用:

char *strdup(const char *string) {
    char *pointer = malloc(strlen(string) + 1);
    if (pointer) { 
        strcpy(pointer, string); 
    }
    return pointer;
}
于 2013-02-18T01:12:32.417 回答
0

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

编辑

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

于 2013-02-18T01:13:15.483 回答
0

您是否尝试过仅对矩阵使用一维数组?

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

于 2019-12-13T10:45:28.703 回答