c語言使用聯(lián)合類型(改)
第一個專欄文章.這是一個很有(e)趣(xin)的綜合問題,來自渣航的oj,題目限定用c語言,不用聯(lián)合類型會異常困難.(當然如果用.net 有l(wèi)inq之類的東西或許寫起來會舒服一些,但是運行起來是什么樣就不知道了,我也沒寫過)




下面是如 何 拿 下?這個題
先說自定義數(shù)據(jù)結構的事(如果有更好的寫法歡迎評論/私)

第一個聯(lián)合類型表示一個數(shù)據(jù) date[0]表示年,date[1]表示月,date[2]表示日期.
第二個表示一行數(shù)據(jù),包括原始數(shù)據(jù)和讀進來準備進行排序的數(shù)據(jù).
第三個是數(shù)據(jù)表,int[]解決是什么型的數(shù)據(jù),char[][]是列名.
rows數(shù)組儲存整個表所有行的地址(排序時要copy和swap一個大結構不太好,只用交換他們的地址即可)
下面處理排序的問題 引入一個輔助結構(本人做的時候可以更舒服些)

聲明變量

tbl是表,tmp是從標準輸入讀字符串的臨時變量
對<=100個列排序開100的數(shù)組,arr是每行數(shù)據(jù)真正存儲用的地方
r是行數(shù),c是列數(shù) tot是輔助變量

下面給比較兩個元素的函數(shù)(比較規(guī)則給了,照著寫即可.
dt是數(shù)據(jù)類型 1表示int 2表示varchar 3表示date 4表示real
返回正數(shù)則p指向的元素"大于"q指向的元素,返回負數(shù)則p指向的元素"小于"q指向的元素,返回0表示p,q指向的元素相等

下面考慮比較兩行的函數(shù),照著題目要求來就行了.
注意參數(shù)類型(等下這個函數(shù)要傳到qsort里面 我們用qsort排序table里面的指針數(shù)組

注:有關qsort的用法可以參見下文:
https://www.cnblogs.com/syxchina/archive/2010/07/29/2197382.html
一個輔助方法 把字符串轉換為整形(標明第幾行


下面給出主函數(shù)寫法.
int main(int argc,char **argv){
/*先讀入數(shù)據(jù)
解決列名和列的數(shù)據(jù)類型.
*/

/*
然后讀這個表 注意原始字符串和制作的數(shù)據(jù)都要存.用scanf和sscanf即可.我聽說有個巨佬沒用sscanf就實現(xiàn)了這個功能
*/

/*
下面解決輸入并制作排序數(shù)據(jù),排序,輸出
*/

/*結束*/
return 0;
}
//感謝杜神,魯神等dalao的幫助(逃
//2020.5.13勘誤