欢迎光临散文网 会员登陆 & 注册

c语言使用联合类型(改)

2020-05-12 17:03 作者:会整活的剑人  | 我要投稿

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

题目要求
题目要求(2)
注意要求的格式

下面是如 何 拿 下 这个题

先说自定义数据结构的事(如果有更好的写法欢迎评论/私)

结构声明,解说见下

第一个联合类型表示一个数据 date[0]表示年,date[1]表示月,date[2]表示日期.

第二个表示一行数据,包括原始数据和读进来准备进行排序的数据.

第三个是数据表,int[]解决是什么型的数据,char[][]是列名.

rows数组储存整个表所有行的地址(排序时要copy和swap一个大结构不太好,只用交换他们的地址即可)

下面处理排序的问题 引入一个辅助结构(本人做的时候可以更舒服些)

key是排序的列名,rc是排哪一列,ord是正序(1)或逆序(-1)

声明变量

解释见下

tbl是表,tmp是从标准输入读字符串的临时变量

对<=100个列排序开100的数组,arr是每行数据真正存储用的地方

r是行数,c是列数 tot是辅助变量

下面给比较两个元素的函数(比较规则给了,照着写即可.

dt是数据类型 1表示int 2表示varchar 3表示date 4表示real

返回正数则p指向的元素"大于"q指向的元素,返回负数则p指向的元素"小于"q指向的元素,返回0表示p,q指向的元素相等

排序(1)

下面考虑比较两行的函数,照着题目要求来就行了.

注意参数类型(等下这个函数要传到qsort里面 我们用qsort排序table里面的指针数组

排序(2)

注:有关qsort的用法可以参见下文:

https://www.cnblogs.com/syxchina/archive/2010/07/29/2197382.html

一个辅助方法 把字符串转换为整形(标明第几行


按题目要求永远不会返回-1

下面给出主函数写法.

int main(int argc,char **argv){

/*先读入数据

解决列名和列的数据类型.

*/

/*

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

*/

/*

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

*/

/*结束*/

return 0;

}

//感谢杜神,鲁神等dalao的帮助(逃

//2020.5.13勘误


c语言使用联合类型(改)的评论 (共 条)

分享到微博请遵守国家法律