【问题标题】:C-Sorting days of the weekC-排序一周中的几天
【发布时间】:2013-08-07 05:18:06
【问题描述】:

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

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

现在我有一些结构数组,其中一个元素是星期几,它们不是按顺序排列的,它们是随机排列的,例如:

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

现在不方便的是,这些日子不是按 alpha 顺序排列的:p 所以这让我想知道如何实现某种类型 =/

【问题讨论】:

  • 你想做什么?
  • @zmbq 按天排序结构数组,而不是星期四、星期一、星期三我需要它们在星期一、星期三、星期四。
  • 如果可能,使用char-array 作为索引更改代码形式以使用某些整数类型。它会快很多。请参阅下面的郭立东的答案(在H2CO3的评论中合并)作为可能的方法。

标签: c sorting days


【解决方案1】:

我认为最好用 enum 来制作星期几。喜欢:

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!

【讨论】:

  • 那个巨大的switch 真的应该被const char *[] 取代。那是数据,不是代码。
  • 您可能希望将 H2CO3 建议的方法添加到您的答案中。
  • @H2CO3 我理解你的评论,你的话很有道理。但是如何将枚举存储为 const char * ?你能发布你的答案并告诉我诀窍吗?
  • @LidongGuo 您不能“将枚举存储为const char *”。你要做的是:const char *names[] = { "Monday", "Tuesday", ... } 现在你可以使用枚举的成员索引字符串数组。
  • @LidongGuo 好的,没问题,就说吧。
【解决方案2】:

好的,要正确排序,您需要能够比较两个结构并查看哪个更早。一旦你有了它,你就可以用它来用你最喜欢的排序算法进行排序。

要转换s1s2,您需要将s1.days2.day 转换为一个数字——0 代表星期一,1 代表星期二,等等……然后比较这些数字。将日期字符串转换为数字很容易 - 遍历您的 days 数组,并查看其中的哪个条目与 s1.day 相同。

【讨论】:

    【解决方案3】:

    编写一个函数,将星期几作为参数并返回一个 int。返回 1 表示周日,2 表示周一,以此类推。

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

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

    或者,

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

    【讨论】:

      猜你喜欢
      • 2020-07-11
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      相关资源
      最近更新 更多