题目描述
小蓝要处理非常多的数据, 其中有一些数据是日期。
在小蓝处理的日期中有两种常用的形式:英文形式和数字形式。
英文形式采用每个月的英文的前三个字母作为月份标识,后面跟两位数字表示日期,月份标识第一个字母大写,后两个字母小写, 日期小于 10 时要补前导 0。1 月到 12 月英文的前三个字母分别是 Jan
、Feb
、Mar
、Apr
、May
、Jun
、Jul
、Aug
、Sep
、Oct
、Nov
、Dec
。
数字形式直接用两个整数表达,中间用一个空格分隔,两个整数都不写前 导 0
。其中月份用 1 至 12 分别表示 1 月到 12 月。
输入一个日期的英文形式, 请输出它的数字形式。
输入格式
输入一个日期的英文形式。
输出格式
输出一行包含两个整数,分别表示日期的月和日。
输入输出样例
输入 #1复制
Feb08
输出 #1复制
2 8
输入 #2复制
Oct18
输出 #2复制
10 18
说明/提示
蓝桥杯 2020 第三轮省赛 AB 组 F 题。
解题过程
拿到的时候想,这题不就是个映射吗,给的输入也这么标准,用map存储一下,再用string容器里面的成员函数转换一下就行。其他常规写法大佬们都有题解,需要的话看别的就行,我这里就用map水一下。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
// 比较懒,就直接用map了
map<string,int> m = {{"Jan",1}, {"Feb",2}, {"Mar",3}, {"Apr",4},
{"May",5}, {"Jun",6}, {"Jul",7}, {"Aug",8}, {"Sep",9},
{"Oct",10}, {"Nov",11}, {"Dec",12}};
string month = s.substr(0,3); //拿前三个元素
string s_day = s.substr(3,2); //拿后两个元素
int day = stoi(s_day); //转换成整型
cout << m[month] << " " << day << endl; //输出就行
return 0;
}
AC如下: