2013-08-07 4 views
2

Ok поэтому у меня есть массив, который перечисляет 5 будних дней в следующем порядке:C-сортировка дней недели

char *days[5]={"Monday","Tuesday","Wednesday","Thursday","Friday"}; 

Теперь у меня есть некоторые структуры массивов и один из элементов дни недели и они не в порядке, они находятся в случайном порядке, как:

d[0].day is "Thursday" 
d[1].day is "Monday" 
d[2].day is "Wednesday" 

Теперь неудобно дни не в альфа порядке: р так, что заставляет меня задаться вопросом, как я могу осуществить своего рода какой-то =/

+0

Что вы пытаетесь сделать? – zmbq

+0

@zmbq сортировать массив структур в порядке дней, а не в четверг, в понедельник, среду. Мне нужны они в понедельник, среду, четверг. –

+0

Если возможно, измените форму кода, используя индекс 'char'-array в качестве индекса для использования целого типа. Это будет намного быстрее. См. Ответ * Lidong Guo * (с объединением в комментарии от * H2CO3 *) ниже как возможный подход. – alk

ответ

2

Я думаю, что лучше сделать дни недели перечислимыми. Как:

enum Days{ 
    Monday = 1, 
    Tuesday, 
    Wednesday, 
    Thursday, 
    Friday 
} 

После этого вы получите данные по день функции как

void printDays(enum d,char * buffer) 
{ 
const char *daysName[] = {"Monday","Tuesday","Wednesday","Thursday","Friday"}; 
memcpy(buffer,daysName[d-1]); 
} 

Тогда при использовании

d[0].day is "Thursday" 
d[1].day is "Monday" 
d[2].day is "Wednesday" 

Это легко сортировать .Это на самом деле просто хранить 1,2, 3,4,5!

+1

Этот огромный 'переключатель' действительно должен быть заменен на' const char * [] '. Это данные, а не код. –

+0

Возможно, вы захотите добавить к apporach, предложенному * H2CO3 *, к вашему ответу. – alk

+0

@ H2CO3 Я понимаю ваш комментарий, ваши слова действительно имеют смысл. Но как я могу сохранить перечисление как 'const char *'? Можете ли вы отправить ответ и показать мне трюк? –

1

ОК, чтобы отсортировать это правильно, y ou нужно уметь сравнивать две структуры и видеть, что раньше. После этого вы можете использовать его для сортировки с вашим любимым алгоритмом сортировки.

Для преобразования s1 и s2, вам нужно преобразовать s1.day и s2.day в номере - 0 в понедельник, 1 для вторник, и т.д ..., а затем сравнить цифры. Преобразование строки дня в число легко - переберитесь по массиву days и посмотрите, какая запись в нем идентична s1.day.

0

Напишите функцию, которая принимает день недели в качестве параметра и возвращает int. Возвращение 1 на воскресенье, 2 на понедельник и т. Д.

Затем напишите еще одну функцию, которая принимает два дня в качестве параметров и использует первую функцию, возвращает более ранний день.

Теперь, используя эти две функции, вы можете реализовать любой стандартный алгоритм сортировки. То же, что и для сортировки.

Или

Вы можете иметь другой массив такого же размера, что и массив, содержащий структуру. Затем вы копируете структуру в новый массив, но сначала копируете все воскресенья, затем все понедельники и т. Д.

Смежные вопросы