2010-03-17 1 views
0

Я STRUCT как:функцию сравнения для дат

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"}}; 

То, что я хочу сделать, это сортировать-структуру «хранятся» на stored.dates.

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

Я не совсем уверен, что было бы хорошим способом сортировать эти дни? Сравните их как c-строки?

+0

Что представляет собой "ctr"? – John

+0

Будет ли формат даты - дня (дд), месяца (МММ), года (гггг) - всегда одинаковым? –

+0

ctr в основном просто счетчик - не нужен – Chris

ответ

0

Вы можете сравнить их как строки, но можете сравнить подстроки. Сравните годы, и если они не равны, у вас есть свой ответ. Затем сравните месяцы, вам понадобится какая-то таблица для заказа месяцев по имени. Наконец, если месяцы совпадают, сравните дни.

1

Я хотел бы преобразовать даты в число, используя что-то вроде:

year * 10000 + month * 100 + day; 

, а затем сделать простое числовое сравнение (и на месяц, вам необходимо сопоставить с января 1, Feb 2, и т.д. .).

Если вы проводите много сравнений, вы можете захотеть кэшировать числовой эквивалент в структуре.

1

Если вы преобразуете даты в формат YYYYMMDD (как в 20100314), вы можете сравнить их как строку или как целое число (после преобразования).

1

Отформатированные даты ISO 8601 («YYYYMMDD» или «YYYY-MM-DD» и т. Д.) Тривиально сопоставимы с строками C. В вашем формате нет - будет ли изменение формата строк даты вариантом?

PS: Если вы избавитесь от «-», вы можете даже сохранить дату как простое 32-битное целое число. В зависимости от того, что ваше приложение делает с этими датами, это может быть дополнительным бонусом.

+0

да, смена его на ГГГГ-ММ-ДД - это определенно возможность. – Chris

+0

Это хороший побочный эффект, что нотация ISO 8601 является международной (без английских месяцев) * и * единственной однозначной цифровой нотации (о которой я знаю). Я бы пошел на это. – DevSolar