c语言使用联合类型(改)
第一个专栏文章.这是一个很有(e)趣(xin)的综合问题,来自渣航的oj,题目限定用c语言,不用联合类型会异常困难.(当然如果用.net 有linq之类的东西或许写起来会舒服一些,但是运行起来是什么样就不知道了,我也没写过)




下面是如 何 拿 下 这个题
先说自定义数据结构的事(如果有更好的写法欢迎评论/私)

第一个联合类型表示一个数据 date[0]表示年,date[1]表示月,date[2]表示日期.
第二个表示一行数据,包括原始数据和读进来准备进行排序的数据.
第三个是数据表,int[]解决是什么型的数据,char[][]是列名.
rows数组储存整个表所有行的地址(排序时要copy和swap一个大结构不太好,只用交换他们的地址即可)
下面处理排序的问题 引入一个辅助结构(本人做的时候可以更舒服些)

声明变量

tbl是表,tmp是从标准输入读字符串的临时变量
对<=100个列排序开100的数组,arr是每行数据真正存储用的地方
r是行数,c是列数 tot是辅助变量

下面给比较两个元素的函数(比较规则给了,照着写即可.
dt是数据类型 1表示int 2表示varchar 3表示date 4表示real
返回正数则p指向的元素"大于"q指向的元素,返回负数则p指向的元素"小于"q指向的元素,返回0表示p,q指向的元素相等

下面考虑比较两行的函数,照着题目要求来就行了.
注意参数类型(等下这个函数要传到qsort里面 我们用qsort排序table里面的指针数组

注:有关qsort的用法可以参见下文:
https://www.cnblogs.com/syxchina/archive/2010/07/29/2197382.html
一个辅助方法 把字符串转换为整形(标明第几行


下面给出主函数写法.
int main(int argc,char **argv){
/*先读入数据
解决列名和列的数据类型.
*/

/*
然后读这个表 注意原始字符串和制作的数据都要存.用scanf和sscanf即可.我听说有个巨佬没用sscanf就实现了这个功能
*/

/*
下面解决输入并制作排序数据,排序,输出
*/

/*结束*/
return 0;
}
//感谢杜神,鲁神等dalao的帮助(逃
//2020.5.13勘误