例如,我從文件中讀出一個字串char chlogtime="23/Jul/2006:00:00:00" 然後接下來要拿它跟別的字串比先後順序,字串應該是不能比的, 所以要如何把它從文字轉成時間函數呢?
2006-07-25 13:48:04 · 3 個解答 · 發問者 Cindy 6 in 電腦與網際網路 ➔ 程式設計
我剛才查了一下書,
書裡只有strftime, 但它好像是把時間轉字串,
至於scanf的用法…目前找不到,
可否麻煩大大再補充一下,謝謝!!
2006-07-26 07:52:33 · update #1
兩位的程式我都看不太懂,
放進編輯程式,也無法compiler成功耶…
可否加些註解呢?謝謝!!
2006-08-02 11:27:31 · update #2
你要不要試試 strptime?
你用的是啥 compiler?
2006-07-25 19:57:52 補充:
不然你就要用 scanf("%d/%s/%d:%d:%d", &dat, mon, &year, &hour, &,month, &sec);
2006-07-25 20:01:47 補充:
不好意思,&,month 中的那個 , 是多餘的!還出不來,再補充。(火燒屁屁沒空詳解。還要再燒 36 小時。36小時以後還有問題,我可以寫再詳細一點。)加油! ^_^
2006-07-25 20:03:27 補充:
#define _XOPEN_SOURCE
#include
char *strptime(const char *s, const char *format, struct tm *tm);
Linux C 的 manual 裡是這麼寫的
2006-07-29 22:01:23 補充:
#include
2006-07-29 22:02:54 補充:
sscanf(buf, "%d/%3s/%d:%d:%d:%d", &dat, mon, &year, &hour, &min, &sec); for (i=0; i<12; i++) if(!strcmpi(mon, nam[i])) break; sprintf(buf, "%04d/%02d/%02d %02d:%02d:%02d", year, i+1, dat, hour, min, sec); return buf;}
2006-07-29 22:03:53 補充:
void main(void){ char *dt1 = "27/May/1998:22:31:30", *dt2 = "19/Jul/2000:22:27:45"; int i; convert(dt1); convert(dt2); if((i=strcmp(dt1, dt2)) > 0) printf("%s > %s\n", dt1, dt2); else if(i) printf("%s < %s\n", dt1, dt2); else printf("%s = %s\n", dt1, dt2);}
2006-07-29 22:07:57 補充:
不好意思,回答時太忙,不但多打了〝,〞,連 min 打成了 month 到剛才才發現。自由軟體的寫法比較標準、比較深。scanf 的重點在於中間那個 3 , / 和 :,以及後面那一堆東東前的 &。(除了 mon 前不用加)還有不懂再問。^_^
2006-07-25 15:49:27 · answer #1 · answered by ? 7 · 0⤊ 0⤋
將字串拆開再稍微重新排列一下應該就可以比了,試試看吧char *Rearrangement(char *buf, char *delims){ char *s, *list[10], cBuf[64]; int cnt = 0, m; char *mon[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; s = strtok(buf, delims); while( s != NULL ) { list[cnt++] = s; s = strtok(NULL, delims); } for( m = 0; m < 12; m ++ ) { if( strcmpi(list[1], mon[m]) == 0 ) break; } sprintf(cBuf, "%04d/%02d/%02d-%02d:%02d:%02d", atoi(list[2]), m+1, atoi(list[0]), atoi(list[3]), atoi(list[4]), atoi(list[5])); strcpy(buf, cBuf); return buf;}void main(void){ char *delims = "/:\n"; char *tm1 = "27/Jul/2006:20:52:30"; char *tm2 = "25/Jan/2006:23:30:00"; int res; Rearrangement(tm1, delims); Rearrangement(tm2, delims); res = strcmp(tm1, tm2); if( res > 0 ) printf("%s > %s\n", tm1, tm2); else if( res < 0 ) printf("%s < %s\n", tm1, tm2); else printf("%s = %s\n", tm1, tm2); system("pause");}
2006-07-27 17:05:07 · answer #2 · answered by elastic 7 · 0⤊ 0⤋
那我順便問一下好了,Jacob大大所說的strptime函數是在那個標頭檔裡呀?
2006-07-25 15:54:19 · answer #3 · answered by Almond 6 · 0⤊ 0⤋