又一次记录了刷题过程中的心路历程,其实有时候觉得一个人刷题还挺无聊的。
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]中括号的使用和哈希表建立时大括号的运用