C-排序一周中的几天

时间:2013-08-07 05:18:06

标签: c sorting days

好的,所以我有一个数组,按顺序列出5个工作日:

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

现在我有一些结构数组,其中一个元素是一周的日子,它们不是有序的,它们是随机顺序,如:

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

现在不方便的是,日子不是按字母顺序排列的:p因此让我想知道如何实现某种类型= /

3 个答案:

答案 0 :(得分: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 :(得分:1)

好的,要正确排序,你需要能够比较两个结构,看看哪个更早。完成后,您可以使用它来使用您喜欢的排序算法进行排序。

要转换s1s2,您需要将s1.days2.day转换为数字 - 0表示星期一,1表示星期二等等...然后比较数字。将日期字符串转换为数字非常简单 - 循环遍历days数组,并查看其中的哪个条目与s1.day相同。

答案 2 :(得分:0)

编写一个函数,该函数将一周中的某一天作为参数并返回一个int。周日返回1,周一返回2,依此类推。

然后编写另一个需要两天作为参数的函数,并使用第一个函数返回前一天。

现在使用这两个函数可以实现任何标准排序算法。与排序数字相同。

或者,

您可以使用与包含结构的数组相同大小的另一个数组。然后将结构复制到新数组中,但首先复制所有星期日,然后复制所有星期一,依此类推。