0

私は次のような構造体を持っています:

struct stored
{
    char *dates; // 12/May/2010, 10/Jun/2010 etc..
};
// const
struct stored structs[] = {{"12/May/2010"}, {"12/May/2011"}, 
                           {"21/May/2009"}, {"13/May/2011"}, 
                           {"10/May/2011"}, {"19/May/2011"}};

私がやりたいことは、「格納された」構造体を格納された日付でソートすることです。

qsort(structs, 9, sizeof(struct stored*), sortdates); // sortdates function

その日を並べ替えるにはどうすればよいかよくわかりません。それらを c-string として比較しますか?

4

4 に答える 4

1

ISO 8601 形式の日付 ("YYYYMMDD" または "YYYY-MM-DD" など) は、C 文字列と自明に比較できます。あなたの形式はそうではありません-日付文字列の形式を変更することはオプションですか?

PS:「-」を取り除くと、日付をプレーンな 32 ビット整数として格納することもできます。アプリケーションがそれらの日付をどう処理するかによっては、追加のボーナスになる可能性があります。

于 2010-03-17T23:00:44.993 に答える
1

次のようなものを使用して、日付を数値に変換します。

year * 10000 + month * 100 + day;

次に、単純な数値比較を行います (月については、1 月から 1、2 月から 2 などにマップする必要があります)。

多くの比較を行っている場合は、数値に相当するものを構造体にキャッシュすることをお勧めします。

于 2010-03-17T22:51:46.913 に答える
1

日付を形式に変換するとYYYYMMDD(のように20100314)、それらを文字列または整数として比較できます (変換後)。

于 2010-03-17T22:54:47.763 に答える
0

これらを文字列として比較することはできませんが、部分文字列を比較することはできます。年を比較し、それらが等しくない場合は、答えが得られます。次に、月を比較します。月を名前で並べ替えるには、ある種のテーブルが必要です。最後に、月が同じ場合は、日を比較します。

于 2010-03-17T22:51:26.393 に答える