[蓝桥杯 2020 省 AB3] 日期识别

每日一道算法题之日期识别

一、题目描述

题目来源:洛谷

【蓝桥杯 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;
    
}
相关推荐
利刃大大5 分钟前
【动态规划:路径问题】最小路径和 && 地下城游戏
算法·动态规划·cpp·路径问题
武大打工仔21 分钟前
用 Java 复现哲学家就餐问题
算法
要做朋鱼燕23 分钟前
【数据结构】用堆解决TOPK问题
数据结构·算法
minji...1 小时前
C++ string类(STL简介 , string类 , 访问修改字符)
开发语言·c++
Forward♞1 小时前
Qt——文件操作
开发语言·c++·qt
十五年专注C++开发1 小时前
CMake进阶: CMake Modules---简化CMake配置的利器
linux·c++·windows·cmake·自动化构建
秋难降1 小时前
LRU缓存算法(最近最少使用算法)——工业界缓存淘汰策略的 “默认选择”
数据结构·python·算法
winds~2 小时前
【git】 撤销revert一次commit中的某几个文件
linux·c++
carver w3 小时前
MFC,C++,海康SDK,回调,轮询
开发语言·c++·mfc