2017-07-29 103 views
-2

我有这样如何从字符串转换为枚举值在c + +?

enum week{Mon, Tue, Wed, Thur, Fri, Sat, Sun}; 

枚举我想传递一个字符串值,以获得枚举的索引值。例如,GetenumIndex("Mon")将返回0

函数的原型是这样的:

week GetenumIndex(string) 

什么是C++的惯用方式来实现这样的转换功能?

+0

这应该很容易使用一些'if()else if()'语句。你已经尝试过了吗? – user0042

+0

你的问题中缺少一些非常重要的东西。那将是一个实际的,具体的问题。 –

+0

你可以使用映射字符串到枚举值的[map](http://en.cppreference.com/w/cpp/container/unordered_map)。 –

回答

0

那么,在这里你去:

#include <iostream> 
#include <string> 
#include <map> 
#include <exception> 

enum week{Mon, Tue, Wed, Thur, Fri, Sat, Sun}; 

week GetenumIndex(const std::string s) {  
    static std::map<std::string,week> string2week { 
     { "Mon", Mon }, 
     { "Tue", Tue }, 
     { "Wed", Wed }, 
     { "Thur", Thur }, 
     { "Fri", Fri }, 
     { "Sat", Sat }, 
     { "Sun", Sun } 
    }; 
    auto x = string2week.find(s); 
    if(x != std::end(string2week)) { 
     return x->second; 
    } 
    throw std::invalid_argument("s"); 
} 

int main() { 
    week w = GetenumIndex("Thur"); 
    std::cout << w << std::endl; 
} 

观摩here

+0

thanx先生帮助我out.You不只是其他人只是浪费对方的时间出来回答我@Sam Varshavchik – user8364661

+1

@ user8364661那么,关闭这个问题,因为重复是正确的。 – user0042