Преобразование названия месяца в число C ++

0

Я не касался C++ в течение очень долгого времени, и я уверен, что это можно сделать в одном лайнере.

У меня есть строковый day который я хочу преобразовать в значение между 0-11. Я обычно делал что-то вроде этого

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

Но я не знаю, как это сделать в C++

  • 0
    Я думаю, что одиночные вершины были бы лучше, чем одиночные символы.
  • 0
    Вы можете использовать std :: map
Показать ещё 1 комментарий
Теги:

4 ответа

3

Простой подход будет примерно таким:

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;
}
  • 0
    Я нажал Ctrl + Enter по ошибке, и моя правка была отправлена неправильно. Смотрите мою текущую версию для ответа
  • 0
    ОК :-) Но ОП хочет индекс от 0..11 :-) И ваше решение вылетает, если в списке нет месяца, что обычно неприемлемо.
Показать ещё 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/.

0

вы можете использовать простой переключатель или std :: map, это менее подробный

0

Вы можете использовать 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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню