将月份名称转换为数字C ++

时间:2014-03-22 08:19:08

标签: c++

我在很长一段时间内都没有触及过C ++,我相信这可以在一个单行中完成。

我有一个字符串day,我希望将其转换为0-11之间的值。 我通常会做这样的事情

months = array('Jan', 'Feb', 'Mar', 'Apr' ...);
print months[day];

但我不知道如何在C ++中做到这一点

4 个答案:

答案 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)