c - 从二维动态分配数组获取列总和?

标签 c dynamic 2d

我有一个动态分配的二维线数组,如下所示:

2152,1,MAIN,AAST,2337,1,26873,LEC  - Lecture,5,5,0,0,0,Ronnie W Liggett,liggett@uta.edu,COBA,348,9:00 AM,9:50 AM,Y,N,Y,N,Y,N,N,1/20/2015,5/8/2015
2152,1,MAIN,AAST,4391,1,26881,IND  - Independent Study,1,5,4,0,0,Schnavia S Hatcher,shatcher@uta.edu,,,,,N,N,N,N,N,N,N,1/20/2015,5/8/2015
2152,1,MAIN,AAST,3339,1,29501,LEC  - Lecture,5,5,0,0,0,Krystal K Beamon,kbeamon@uta.edu,UH,104,11:00 AM,12:20 PM,N,Y,N,Y,N,N,N,1/20/2015,5/8/2015
2152,1,MAIN,ACCT,3309,6,27298,LEC  - Lecture,59,59,0,0,0,Terra C Mcghee,tcbrown@uta.edu,COBA,256,9:00 AM,11:50 AM,N,N,N,N,Y,N,N,1/20/2015,5/8/2015

所有 1000 行都按主题的字母顺序进行冒泡排序(即第四列,上例中的 AAST 和 ACCT)。我需要打印每个科目的总注册人数,即第 9 列(本例中为 5, 1, 5, 59)。我的代码如下:

    for(i=0;i<count;i++)
    {
            total = 0;
            strcpy(currentLine, addresses[i]);
            currentSubject = getSubject(currentLine);
            for(i;i<count;i++)
            {
                    printf("%d\n", i);
                    strcpy(nextLine, addresses[i]);
                    nextSubject = getSubject(nextLine);
                    if(strcmp(currentSubject, nextSubject) == 0)
                    {
                            strcpy(nextLine, addresses[i]);
                            enrollment = getEnrollment(nextLine);
                            total += enrollment;
                    }
                    else
                    {
                            printf("%s          %d\n", currentSubject, total);                              
                            break;
                    }
            }



    }

地点:

  • addresses 是包含所有 1000 行的二维数组
  • getSubject() 使用 strtok() 提取第四列
  • getEnrollment() 使用 strtok() 提取注册列
  • count 等于文件中的行数,即 999(第一行是被忽略的标题行(

我继续使用 strcpy() 来避免由于 strok() 导致原始字符串损坏。然而,这个逻辑似乎不起作用,因为我的总数显示为:

AAST          11
ACCT          193
ADVT          12

相关行(我删除了所有无用的信息,以便更容易阅读)是:

AAST,5
AAST,1
AAST,5
ACCT,59
ACCT,26
ACCT,34
ACCT,37
ACCT,18
ACCT,59
ACCT,19
ADVT,136
ADVT,12

看起来对于 ACCT,倒数第二个值 (59) 没有添加,对于 ADVT,倒数第二个值 (136) 也没有添加。我的逻辑有什么问题吗?

最佳答案

您对嵌套循环使用相同的索引i。您不应在外循环中递增它,并且应将 printf 移出内循环以避免丢失最后的条目。

试试这个:

for (i = 0; i < count;) {
    total = 0;
    strcpy(currentLine, addresses[i]);
    currentSubject = getSubject(currentLine);
    for (; i < count; i++) {
        strcpy(nextLine, addresses[i]);
        nextSubject = getSubject(nextLine);
        if (strcmp(currentSubject, nextSubject) != 0)
            break;
        strcpy(nextLine, addresses[i]);
        total += getEnrollment(nextLine);
    }
    printf("%s          %d\n", currentSubject, total);                              
}

关于c - 从二维动态分配数组获取列总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29527444/

相关文章:

c - 被调用函数中的 glib 列表是否需要空闲以释放内存

c - 用c编写的程序检查数字和大写字母不起作用

javascript - 如何将动态数据从sql插入到chartjs堆叠条形图javascript中

MySQL 动态 ORDER BY

javascript - 我正在尝试使用按钮创建动态 HTML 更新

algorithm - 连续物理引擎的碰撞检测技术

c - c 中的大小和数组

c++ - 这是 "*ptr++ = *ptr + a"未定义的行为吗?

algorithm - 如何在 2D 中绘制透视校正网格

unity3d - Unity 2D - 可破坏地形或忽略 Spritemask 上的多边形碰撞器