【问题标题】:Accessing the enum index from string从字符串访问枚举索引
【发布时间】:2021-09-01 05:46:00
【问题描述】:

我已经声明了一个像这样的枚举:

enum Month
{
    Mon,
    Tue,
    Wed,
    Thu,
    Fri,
    Sat,
    Sun
};

现在给定一个字符串"Mon",如何得到0,即它在枚举中的索引?

有什么简单的方法吗?

我正在尝试编写一个类似nextDay(day, number) 的函数,它接受day= "Mon""Tue" 或...,以及一个数字,并返回该天数之后的第二天。

所以,如果day = "Mon"number = 2,它应该返回"Wed"

所以,我选择为此使用枚举。但我被困在这一点上。

【问题讨论】:

  • 没有办法自动将字符串映射到枚举。您可以使用地图之类的东西为您创建映射。
  • int day = Mon; printf("Three days after Monday is day number %d\n", day + 3); 如果要获取字符串,可以使用字符串数组并将枚举用作索引。
  • better-enums 这样的库可能会有所帮助。
  • 顺便说一下,像Month 这样的名称用于weekday 枚举非常令人困惑。
  • 注意:如果你使用枚举类而不是经典枚举,这是一个更好的习惯。

标签: c++ enums


【解决方案1】:

您可以使用std::map 将一组值映射到其他值,例如:

enum Day {
    Mon, Tue, Wed, Thu, Fri, Sat, Sun
};

#define ENTRY(d) {#d, d}

const std::map<std::string, Day> days = {
    ENTRY(Mon),
    ENTRY(Tue),
    ENTRY(Wed),
    ENTRY(Thu),
    ENTRY(Fri),
    ENTRY(Sat),
    ENTRY(Sun)
};

Day nextDay(const std::string &day, int number) {
    return static_cast<Day>((static_cast<int>(days.at(day)) + number) % 7);
}

Online Demo

【讨论】:

    【解决方案2】:

    这就是您声明和使用枚举的方式。这是在 C++ 中的

    enum week { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };  
    int main()  
    {  
        week day;  
        day = Friday; // day = 4
        cout << "Day: " << day+1<<endl; // will return 5   
    }     
    

    枚举从 0 开始编号,每个条目递增 1。为它。

    enum week { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
    week day = (week)2 //will return have day as wednesday
    

    我真的不知道如何将 day 转换为 String。但我最好的选择是字典。

    #include<iostream.h>
    using std::map
    map<int, string> week = {1:"Mon",2:"Tue",.....,6:"Sun"};
     
    int main()
    {
       string day = week[2]; // day = "Wed";
       cout<<day<<endl; // will print "Wed"
    } 
    

    【讨论】:

    • 您的示例中没有任何内容回答 OP 的实际问题,即如何将字符串 `"Mon"" 转换为 0 等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    相关资源
    最近更新 更多