【问题标题】:Convert txt file to adjacency list将txt文件转换为邻接表
【发布时间】:2014-05-20 16:50:48
【问题描述】:
S,John 2 MATH101 CSE100
K,Jack 2 BLAW203 MATH101 
B,Brown 2 STAT253 MATH259 
G,Mary 3 MATH259 HIST111 STAT253 

这是我的 txt 文件,我想转换邻接列表。

矩阵中的课程以数字命名,如下所示:

0 - MATH101 
1 - CSE100 
2 - BLAW203 
3 - STAT253 
4 - MATH259 
5 - HIST111 

如何在 C 中读取和转换邻接表?谢谢。

【问题讨论】:

  • 你试过了吗?尝试后回来
  • 我不知道。这是我项目的一部分。如果我能做到这部分,我会完成项目。
  • 我们不是来做你的功课的,你必须带点东西上桌。看问题的高度(不是在编程方面,只是作为一个概念)。看看你能不能把它从高级到代码。

标签: c


【解决方案1】:

这是可以做到的一种方式:

  1. 打开输入文件。处于阅读模式。
  2. 进入循环读取输入文件中的所有行。
    1. 从文件中读取第一行。
    2. 分配一个新的学生列表节点。
    3. 将 lineBuf 字段中的学生姓名解析为 newStudentNode->name
    4. 从 lineBuf 解析课程数。
    5. 输入一个循环来解析 lineBuf 中的每个课程名称。
      1. 解析课程名称。
      2. 将课程名称转换为课程编号。
      3. 分配一个新的课程节点。
      4. 插入 newCourseNode 作为 newStudentNode 的 courseList 的尾节点。
    6. 插入 newStudentNode 作为 studentList 的尾节点。

如果需要,here 是剧透代码。

【讨论】:

    【解决方案2】:

    这是解析部分 - 现在使用结构创建一个列表并检查已插入的元素。

    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
    
    int main()
    { 
    
        FILE *in = fopen("newfile","r");
        FILE *out = fopen("newfile2.txt","w");
        size_t snby = 1024;
        char *lineBuf = malloc(1024*sizeof(char));
        char *tmpVal;
        char *maxVal;
        int loop = 0;
        int gar = 0;
        int line = 0;
        while(getline(&lineBuf, &snby, in) != -1)
        { 
                if (gar == 0)
                {
                    fprintf(out, "%d - ", line);
                    line++;
                    gar++;
                }
                else
                {
                    fprintf(out, "\n%d - ", line);
                    line++;
                }
                line++;
                int mark = 0;
                tmpVal = lineBuf;
                while(mark != 2)
                {
                    if (*tmpVal == ' ') mark++;
                    tmpVal++;
                }
                while(*tmpVal != '\n')
                {
                    if(*tmpVal == ' ')
                    {
                        fprintf(out, "\n%d - ", line);
                        line++;
                    }
                    else
                    {
                        fprintf(out, "%c", *tmpVal);
                    }
                    tmpVal++;
                }
    
    
        }
        free(lineBuf); 
        fclose(out);
        fclose(in);
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多