在C ++中将Switch与枚举一起使用

时间:2019-02-14 03:21:14

标签: c++

对于以下代码,我想输入day并获得cout值。 目前,如果我输入0、1、2、3,它可以正确给出cout值 Exp结果:C ++程序要求一天并在一周中输出一天的标签。请告知如何解决。

from itertools import chain

my_list = [
    '05-06-2015', '01-07-2015', '01-07-2015 01-07-2016', '26-08-2015',
    '26-08-2016', '23-06-2015 26-08-2016 01-07-2015', '06-07-2015'
]

flat_list = list(chain(*[x.split() for x in my_list]))

print(flat_list)

3 个答案:

答案 0 :(得分:0)

请注意:

  

每个 switch 动作均与整数常量的值相关联   表达式(即字符和整数常量的任意组合   得出一个恒定的整数值)。

从上一条语句中我们看到可以在enum内使用switch cases值,因为enum值被视为数字。

因此,在您的情况下,无法让用户输入string输入,然后在switch case中检查该输入。在与switch case一起使用输入之前,应将用户输入(无论它是什么)转换为整数常量表达式,以便可以在switch case内部使用。
您也可以参考this,我认为这对您有所帮助。

答案 1 :(得分:0)

开关用于检查整数常量,因此您可以实际打开您拥有的枚举值,例如:

switch (day) {
    case Mon: case Tue: case Wed: case Thu: case Fri:
        cout << "Weekday"; break;
    case Sun: case Sat:
        cout << "Weekend"; break;
    default:
        cout << "??"; break;
}
cout << '\n';

但是,您无法按照期望的方式输入所输入的值,输入单词Tue并将其神奇地转换为值2。如果您具有以下代码:

int x = 42;
std::cin >> x;

,并且您输入一个非数字,例如Tuex不是是您可以使用的任何有用的值。就像您在评论中提到的那样,这几乎是几乎可以肯定的原因,无论您输入哪一天 text ,它都可以告诉您这是周末。他们 all 很有可能将x设置为零(星期日),因为它们不能立即解释为整数。


可以进行的操作是提供一种为您完成转换的功能,类似于此完整程序中显示的功能:

#include <iostream>
#include <string>
#include <algorithm>

int getDayOfWeek(std::string textDay) {
    // Only use up to three characters, and lower-case.

    std::string day = textDay.substr(0,3);
    std::transform(day.begin(), day.end(), day.begin(), ::tolower);

    // Search through collection until found then return index.

    int dayOfWeek = 0;
    for (std::string chk: {"sun", "mon", "tue", "wed", "thu", "fri", "sat"}) {
        if (day == chk) return dayOfWeek;
        ++dayOfWeek;
    }

    // Not found, return sentinel value.

    return -1;
}

// Test harness to allow you to enter arbitrary lines and
// convert them to day indexes. Hit ENTER on its own to stop.

int main() {
    std::string day;
    std::cout << "Enter day: "; std::getline(std::cin, day);
    while (!day.empty()) {
        std::cout << day << " --> " << getDayOfWeek(day) << '\n';
        std::cout << "Enter day: "; std::getline(std::cin, day);
    }
    return 0;
}

此功能的“实质”是getDayOfWeek()函数,给定一个字符串,它可以告诉您该字符串代表星期几(如果有)。一旦将其作为整数,就可以在其上使用switch语句,例如:

std::string getDayClass(std::string day) {
    switch getDayOfWeek(day) {
        case 0: case 6:
            return "weekend";
        case 1: case 2: case 3: case 4: case 5:
            return "weekday";
    }
    return "unknown";
}

请记住,我已经使用 specific 规则将文本日期解码为整数,仅检查前三个字符,并以小写形式检查

因此,WEDDED BLISS作为输入将认为它是星期三。显然,您可以根据情况使规则更具约束性。

答案 2 :(得分:-1)

您想要这样的东西:

int main()
{
    string day;
    cout << " Enter a day ";
    cin >> day;
    if (day == "Sun")
    {
        cout << "Weekend" << endl;
    }
    else if (day == "Mon")
    {
        cout << "Start of work week " << endl;
    }
    ...
    return 0;
}