【问题标题】:How to change the ouput from 1 to Monday?如何将输出从 1 更改为星期一?
【发布时间】:2020-12-16 21:40:15
【问题描述】:

我正在使用这里的代码:https://www.geeksforgeeks.org/find-day-of-the-week-for-a-given-date/。它找到日期所在的星期几。输出是对应于星期几的数字,但我希望它说“星期一”而不是“1”。怎么改?

#include <iostream>

using namespace std;

int dayofweek(int d, int m, int y)
{
    static int t[] = { 0, 3, 2, 5, 0, 3,
                       5, 1, 4, 6, 2, 4 };
    y -= m < 3;
    return ( y + y / 4 - y / 100 +
             y / 400 + t[m - 1] + d) % 7;
}

int main()
{
    int day = dayofweek(03, 02, 2020);
    cout << day << endl;

    return 0;
}

【问题讨论】:

  • 一种方法是在nameOfDay[1] == "Monday"处创建一个字符串数组或向量,然后你可以输出nameOfDay[day]
  • 为什么不使用 case 或 if-else 来映射数字和天数?
  • 旁注:mktime 和现代 C++ 的 Date and time utilities 也可以让您获得很多乐趣
  • 提示:避免返回带有极端 y,m,d 的负值。 % 7 --> % 7u.
  • 公共服务公告。该算法假定一个预测的公历。也就是说,它在引入之前向后应用公历规则(这很好,并且由 ISO 8601 推荐)。它的有效期为 0000-03-01。在此之前,它给出了错误的结果。它在未来数百万年内有效。

标签: c++ date weekday


【解决方案1】:

编写一个接受整数输入并返回字符串的方法。

const char* day(int n) 
{
    static const char* days[] = {
        "Monday", "Tuesday", …, "Sunday"
    }
    if (n >= 1 && n <= 7)
        return days[n-1];
    else
        return "Failday";
}

我假设这里的星期日是 7 点;如果为 0,请相应调整。

你可能更喜欢 std::string 而不是 char*;我会把这个细节留给你。

【讨论】:

  • 考虑返回 nullptr 失败。如果您忘记测试,它会更容易测试并且更引人注目。
  • 正确的设计取决于预期的用途,我想说。在这种特殊情况下,该值只会在控制台上输出。如果这是“生产”代码,我会抛出异常。
  • 我的回复哪一部分不是C++?
  • 高级:使用n &gt;= 1 &amp;&amp; n &lt;= 7 对子范围进行测试很好,但使用modulo_Euclidean(n, 7)(或类似的)将是形成索引并允许完整范围n 的另一种合理替代方法.毕竟,一周中的日子会重复。
【解决方案2】:

有很多方法可以实现您的目标。一种(天真的)方法是编写一个看起来像

的附加函数
std::string to_date_string(int day) {
    switch(day) {
    case 1:
        return "Monday";
    case 2:
        return "Tuesday";
    // TODO: Continue this pattern.
    }
}

这需要包含string 标头。然后你可以简单地写

std::cout << to_date_string(day) << std::endl;

作为附加提示:尝试在没有using namespace std; 的情况下进行编程。这条线可能是一个邪恶的陷阱 - 特别是对于初学者。

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多