每日一道算法题之日期识别
一、题目描述
【蓝桥杯 2020 第三轮省赛 AB 组 F 题】小蓝要处理非常多的数据, 其中有一些数据是日期。
在小蓝处理的日期中有两种常用的形式:英文形式和数字形式。英文形式采用每个月的英文的前三个字母作为月份标识,后面跟两位数字表示日期,月份标识第一个字母大写,后两个字母小写, 日期小于 10 时要补前导 0。1 月到 12 月英文的前三个字母分别是 Jan、Feb、Mar、Apr、May、Jun、Jul、Aug、Sep、Oct、Nov、Dec。数字形式直接用两个整数表达,中间用一个空格分隔,两个整数都不写前 导 0。其中月份用 1 至 12 分别表示 1 月到 12 月。输入一个日期的英文形式, 请输出它的数字形式。
C++程序要求输入输出如下:
输入格式
输入一个日期的英文形式。
输出格式
输出一行包含两个整数,分别表示日期的月和日。
示例如下:
cpp
输入:Feb08 输出:2 8
二、思路
本题我是采用暴力解 的办法,定义一个string类型的字符串s,用于接收输入,然后判断前三个字符和月份的对应关系,对于数字的转化,第三个字符减去字符'0',得到一个差值,这个差值再乘以十,加上第四个字符与字符'0'的差值就是得到转化后的数字。因此通过本题,学习到的一个处理办法就是如果之后题目需要你将字符数字转化为整型数字 ,可以考虑字符相减的办法。
三、C++代码
cpp
#include<bits/stdc++.h>
using namespace std;
//日期识别
int main(){
string s;
cin>>s;
int month,day;
if(s[0]=='J')
{
if (s[1]=='a') month=1;
else if(s[2]=='n') month=6;
else month=7;
}else if(s[0]=='F'){
month=2;
}else if(s[0]=='M')
{
if(s[2]=='r'){
month=3;
}else{
month=5;
}
}else if(s[0]=='A')
{
if(s[1]=='p'){
month=4;
}else{
month=8;
}
}else if(s[0]=='S'){
month=9;
}else if(s[0]=='O'){
month=10;
}else if (s[0]=='N'){
month=11;
}else{
month=12;
}
day=(s[3]-'0')*10+(s[4]-'0');
cout<<month<<" "<<day<<endl;
}