【问题标题】:create two-dimensional array/matrix using C使用 C 创建二维数组/矩阵
【发布时间】:2020-04-29 07:20:43
【问题描述】:

我需要使用 C 从 CSV 文件中读取带有某种矩阵的文件(矩阵列和行的数量可能每次都不同)。 该文件将是这样的:

#,#,#,#,#,#,.,#,.,.,.$
#,.,#,.,.,#,.,#,#,#,#$
#,.,#,.,.,.,.,.,.,#,#$
#,.,#,.,.,#,#,#,#,#,#$
#,.,.,#,.,.,.,.,.,.,#$
#,.,.,.,#,.,#,#,.,.,#$
#,.,.,.,.,#,.,.,.,.,#$
#,.,.,.,.,#,.,.,.,.,#$
#,.,.,.,.,.,.,.,.,.,#$
#,#,#,#,#,#,#,#,#,.,#$

我需要读取文件并将其保存到二维数组中,以便能够遍历它并使用 Lee 算法找到走出迷宫的路径。

所以我想做一些类似的事情:

int fd = open (argv[i], O_RDONLY);

    while (read(fd, &ch, 1)) {
     here should be some for loops to find the  number of colums and rows. 
    }

不幸的是,如果矩阵的高度和宽度未知,我不知道该怎么做。

我正在尝试这样做:

while (read (fd, &ch, 1)) {
  for (int i = 0; arr[i] != '\0'; i++) {
    for (int j = 0; j != '\n'; j++) {
      somehow save the values, number of columns and rows.
    }
  }
}

但是,行数可能大于列数。 任何帮助将不胜感激

【问题讨论】:

    标签: c arrays multidimensional-array


    【解决方案1】:

    如果大小未知但必须在解析文件时确定,那么一个简单但有点幼稚的想法是使用char** rows = malloc(n); 其中n 是一个足够大的数字,可以涵盖大多数正常情况用例。 realloc 如果您经过 n

    然后对于您读取的每一行,通过另一个 malloc 将其存储在 rows[i] 中,然后是 strcpy/memcpy。

    一个更聪明的版本是首先读取第一行,找到行长度,然后假设文件中的所有行都具有该大小。你可以做一个char (*rows)[n] = malloc (n * (row_length+1) ); 来分配一个真正的二维数组。这比char** 具有优势,因为您获得了一个适当的缓存友好的二维数组,具有更快的访问、更快的分配和更少的堆碎片。有关详细信息,请参阅Correctly allocating multi-dimensional arrays

    char (*rows)[n] 的另一大优势是,如果您提前知道n,您实际上可以一次性read/fread 整个文件,这将是一个显着的性能提升,因为文件 I/ O 将成为这个程序的瓶颈。

    如果您事先不知道n,您仍然需要重新分配,以防您最终阅读的行数超过n。所以第三种选择是使用链表,这可能是最糟糕的选择,因为它很慢并且增加了复杂性。唯一的优点是链接列表允许您快速添加/删除行。

    【讨论】:

      猜你喜欢
      • 2020-09-19
      • 2011-02-11
      • 2022-09-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多