如何在没有'switch'和'if-else'条件的情况下重写以下代码?

时间:2019-05-05 07:59:42

标签: c++ if-statement switch-statement

int main()
{
    switch (month) 
    {
    case 1:
        days = 31;
        break;
    case 2:
        days = 28;
        break;
    case 3:
        days = 31;
        break;
    }
}

1 个答案:

答案 0 :(得分:2)

最简单的方法是拥有一个Day数组,其中数组索引对应于month-1

See a demo

#include <iostream>
#include <array>

int main() 
{
    using Day = int;
    const std::array<Day, 3> days{ 31 , 28, 31};

    const auto findDay = [&](const std::size_t month) /* noexcept -> const std::size_t*/  
    {
        if (1 <= month && month <= days.size()) return days[month - 1];
        std::cout << "Invalid month\n"; // if not found
        return 0;
    };

    std::cout << findDay(1) << '\n';
    std::cout << findDay(2) << '\n';
    std::cout << findDay(3) << '\n';
    std::cout << findDay(0) << '\n';
}

输出

31
28
31
Invalid month
0