蓝桥杯刷题第四天

又一次记录了刷题过程中的心路历程,其实有时候觉得一个人刷题还挺无聊的。

P8722一道相对来说比较简单但是我用的方法代码量相对来说比较大

题目:

题目分析:本题我的思路是通过字符串来输入字母和数字的结合体,进而通过判断首字母的不同来确定月份,但是其中蕴含相同的首字母,我通过对其他不同字母的判断来解决这个问题,进而解决月份的转换;对于日期则是通过对第四个字符的判断来输出日期的数字,一道相对来说思路比较简单但是代码量巨大的一道题,wwww.

代码如下:

#include<bits/stdc++.h>

using namespace std;

int main()

{

string str;

cin>>str;

switch(str[0])

{

case 'J':

if(str[1]=='a')

cout<<1;

else if(str[1]=='u')

if(str[2]=='n')

cout<<6;

else if(str[2]=='l')

cout<<7;

break;

case 'F':

cout<<2;

break;

case 'M':

if(str[2]=='r')

cout<<3;

else if(str[2]=='y')

cout<<5;

break;

case 'A':

if(str[1]=='p')

cout<<4;

else if(str[1]=='u')

cout<<8;

break;

case 'S':

cout<<9;

break;

case 'O':

cout<<10;

break;

case 'N':

cout<<11;

break;

case 'D':

cout<<12;

break;

}

if(str[3]=='0')

cout<<' '<<str[4];

else

cout<<' '<<str[3]<<str[4];

return 0;

}

1.3和最后一个值得参考和使用!

心得体会:每天给自己洗脑,我怎么这么厉害,轻松拿下,我太牛逼了来保持自信和激情,说完之后状态和心情都很好,不说的话不如给自己洗脑,哈哈哈。

大佬方法1:大佬采用了通过将对应的月份贮存起来,然后通过对输入的字符进行截取,进而与字符数组中的字符判断,得到相对应的下标,进而输出相应的月数。而天数的判断有的大佬采取第四个字符与0的对比来控制日期数(其中字符串截取采用了string str;str.substr(a,b);其中a为开始的地址,b为a之后的几个地址,若超出str这个字符串的长度,则自动读取到该字符串结束!)

月数贮存:

string a[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};

执行代码截取:

month=st.substr(0,3);

    for(int i=0;i<12;i++)

if(month==a[i]){

m=i+1;

break;

}

    d=int(st[3]-48)*10+int(st[4]-48);

易错点:采用substr函数时对于字符前置的忽略!!!

大佬方法二:

大佬用实力给我上了一堂算法课,采用哈希树进行字符和数字的关联,然后采用了库函数 stoi全数字字符串自动转成字符串且去0(突然感觉算法都是以前人为了偷懒设计的,没事,我也喜欢偷懒,哈哈哈)

关键代码:

unordered_map<string,int> mp{//创立哈希表,建立字符到整形的映射

{"Jan",1},

{"Feb",2},

string s=a.substr(0,3),x=a.substr(3,2);

cout<<mp[s]<<" "<<stoi(x); //使用stoi函数

易错点:对于mp[s]中括号的使用和哈希表建立时大括号的运用

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值