2017-07-29 48 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