【发布时间】:2017-01-18 21:31:40
【问题描述】:
我制作了这个示例二维字符串数组
char *strings[][4] = {{"Sport", "gender", "country", "medal"},
{"Cycling", "Womens", "China", "first"},
{"Swimming", "Womens", "China", "second"},
{"Swimming", "Womens", "Indonesia", "third"},
{"Cycling", "Womens", "New Zealand", "second"},
{"Cycling", "Womens", "New Zealand", "third"},
{"Swimming", "Womens", "New Zealand", "first"}}
已经根据3 1 列进行了预排序,首先按国家/地区排序(第 3 列),然后当该列出现平局时,再根据体育项目(第 1 列)进行排序。
我正在尝试做一些简单的分层报告,顶部有标题,如下所示:
Country
Sport Count
-----------------
China
Cycling 1
Swimming 1
Indonesia
Swimming 1
New Zealand
Cycling 2
Swimming 1
数据首先按国家/地区分组(第 3 列),然后计算每个国家/地区的运动计数,其中每个国家/地区不得重复任何运动。
我也想让这个多样化,假设数组在3 1 2列上预先排序,那么它看起来像这样:
{{"Sport", "gender", "country", "medal"},
{"Cycling", "Womens", "China", "first"},
{"Swimming", "Womens", "China", "second"},
{"Swimming", "Womens", "Indonesia", "third"},
{"Cycling", "Womens", "New Zealand", "second"},
{"Cycling", "Womens", "New Zealand", "third"},
{"Swimming", "Womens", "New Zealand", "first"}}
但是分层报告看起来有点不同:
China
Cycling
Womens 1
Swimming
Womens 1
Indonesia
Swimming
Womens 1
New Zealand
Cycling
Womens 2
Swimming
Womens 1
我已经弄清楚了排序,我的问题只是让这种分层报告工作。
对于列规范,我一直在使用命令行参数,到目前为止我的程序是这样的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 10
int
main(int argc, char **argv) {
char *strings[][4] = {{"Sport", "gender", "country", "medal"},
{"Cycling", "Womens", "China", "first"},
{"Swimming", "Womens", "China", "second"},
{"Swimming", "Womens", "Indonesia", "third"},
{"Cycling", "Womens", "New Zealand", "second"},
{"Cycling", "Womens", "New Zealand", "third"},
{"Swimming", "Womens", "New Zealand", "first"}};
int count, start_index, i;
int columns[MAXSIZE];
/* printing command line args out */
for (i = 0; i < count; i++) {
printf("%d ", columns[i]);
}
return 0;
}
有什么方法可以实现这种分层报告?我需要为此实现某种特殊算法吗?
【问题讨论】: