我在很长一段时间内都没有触及过C ++,我相信这可以在一个单行中完成。
我有一个字符串day
,我希望将其转换为0-11之间的值。
我通常会做这样的事情
months = array('Jan', 'Feb', 'Mar', 'Apr' ...);
print months[day];
但我不知道如何在C ++中做到这一点
答案 0 :(得分:5)
一个简单的方法是这样的:
vector<string> months = { "jan", "feb", "mar", "apr", "may", ... };
int month_number = 2;
cout << months[ month_number - 1 ] // it is month_number-1 because the array subscription is 0 based index.
更好但更复杂和更先进的方法是使用std::map
,如下所示:
int get_month_index( string name )
{
map<string, int> months
{
{ "jan", 1 },
{ "feb", 2 },
{ "mar", 3 },
{ "apr", 4 },
{ "may", 5 },
{ "jun", 6 },
{ "jul", 7 },
{ "aug", 8 },
{ "sep", 9 },
{ "oct", 10 },
{ "nov", 11 },
{ "dec", 12 }
};
const auto iter = months.find( name );
if( iter != months.cend() )
return iter->second;
return -1;
}
答案 1 :(得分:2)
您可以使用std::map
编写如下函数:
int GetMonthIndex(const std::string & monthName)
{
static const std::map<std::string, int> months
{
{ "Jan", 0 },
{ "Feb", 1 },
{ "Mar", 2 },
{ "Apr", 3 },
{ "May", 4 },
{ "Jun", 5 },
{ "Jul", 6 },
{ "Aug", 7 },
{ "Sep", 8 },
{ "Oct", 9 },
{ "Nov", 10 },
{ "Dec", 11 }
};
const auto iter(months.find(monthName));
return (iter != std::cend(months)) ? iter->second : -1;
}
答案 2 :(得分:0)
你可以使用一个简单的开关,或std::map,这是不那么冗长的
答案 3 :(得分:0)
使用boost :: assign创建一个std :: map
请参阅http://www.boost.org/doc/libs/1_42_0/libs/assign/doc/index.html#map_list_of和http://www.cplusplus.com/reference/map/map/