读取txt文件创建邻接矩阵

txt文本内容如下,要求使用这些数据来生成一个邻接矩阵
0,2,4,22,65536,65536
2,0,1,6,65536,65536
4,1,0,1,4,65536
22,6,1,0,10,5
65536,65536,4,10,0,3
65536,65536,65536,5,3,0

  我的苦恼在于不知道如何格式化读取每一行的数据,对C语言读文件操作陌生

  复习C语言文件读写C 文件读写 | 菜鸟教程 (runoob.com)

  本次重点使用的是fgets()函数

 

 

 因为它满足我读取每一行的要求,只要判断读取的内容是否为空,写一个循环,fgets()就能实现读取每一行的数据

  有了数据后,就需要对数据进行处理。

  以第一行为例,数据是以字符串类型存储的,而我想要的邻接矩阵必然是需要int类型,所以就必须将字符串分解

0,2,4,22,65536,65536

  如何对一个字符串进行格式化的分解呢?

  <string.h>里有strtok()函数C 库函数 – strtok() | 菜鸟教程 (runoob.com)

  

 

 

   它可以根据分隔符,将字符串分解为我想要的格式,比如strtok(str,","),按","分割字符串,并返回被分解的第一个子字符串,这里就是‘0’

  如果希望得到后续的值,可以再次调用(strtok(NULL, ",")),为什么是NULL呢,这表示默认使用上一次未分割完的字符串继续分割

  循环使用strtok(),我就能够得到第一行的数据

  因此,可以给出以下思路流程

  •   参数初始化,包括邻接矩阵的初始化,文件指针等
  •   打开文件
  •   循环使用fgets()读取每一行数据
    •   循环使用strtok()函数,获取每一列的数据
    •   每一行结束后,将本行数据复制到邻接矩阵中
  •   关闭文件

  

  附上代码

void main()
{
     FILE *fp; // 文件指针
    fp = fopen(path, "r");

    if (fp == NULL) {
        printf("Failed to open file.");
        return 1;
    }

    int graph[MaxVertexNum][MaxVertexNum]; // 邻接矩阵
    memset(graph, 0, sizeof(graph)); // 初始化为0

    int num_nodes = 0;
    char line[1024];
    int row[MaxVertexNum];
    int col = 0;
    int debug = ;

    if(debug)
    {
            while (fgets(line, sizeof(line), fp)) {
            char *p = strtok(line, ",");

            while (p) {


                row[col] = atoi(p); // 转换为整数并存储到邻接矩阵中

                col++;
                p = strtok(NULL, ",");
            }
            memcpy(graph[num_nodes], row, sizeof(row)); // 将本行存储到邻接矩阵中
            num_nodes++;
            col = 0;
        }

        fclose(fp);

        printf("Adjacency matrix:\n");
        for (int i = 0; i < num_nodes; i++) {
            for (int j = 0; j < num_nodes; j++) {
                printf("%d ", graph[i][j]);
            }
            printf("\n");
        }
    }


    return 0;

}

 

posted @ 2023-03-27 14:49  哈啰世界  阅读(216)  评论(0编辑  收藏  举报