回顧一下
自從期末復習進入了白熱化階段沼填,簡書我就斷更了桅咆。
同時我也進行了一定的反思,每日更新一篇文章見證自己的進步固然很好坞笙,但是每篇沒有必要寫的跟個水文一樣岩饼,自己難免也有點瞧不起。
所以我覺得應該做一定的改觀了羞海。有趣的圖片能用的用忌愚,沒必要的就不加了/其實我還是想加上的,也好看也生動對吧却邓。
至于講解的語言硕糊,再精簡點。
舍去題目腊徙,直接放一個原題鏈接作為替代简十。
豐富一下結尾的總結內容,讓人印象深刻一點撬腾。
I 'm BACK
Mars Numbers
原題鏈接
分析:
這道題目螟蝙,是一個map用法的練習題目。很經典民傻,初學時胰默,值得仔細回味反復琢磨。
思路:打表漓踢。
關鍵點:
1.完成“火星文”的存儲
2.開兩個映射牵署。string組,和map<string,int>
值得注意的是喧半,string數(shù)組天生就是一個int到string的映射奴迅,無需map。
3.init函數(shù)負責打表工作挺据。
代碼如下:
#include <cstdio>
#include <iostream>
#include <string>
#include <map>
using namespace std;
//火星數(shù)字的存儲
string unitDigit[13] =
{"tret",
"jan",
"feb",
"mar",
"apr",
"may",
"jun",
"jly",
"aug",
"sep",
"oct",
"nov",
"dec"
};
string tenDigit[13] =
{
"tret",
"tam",
"hel",
"maa",
"huh",
"tou",
"kes",
"hei",
"elo",
"syy",
"lok",
"mer",
"jou"
};
//開兩組映射
string numToStr[170];
map<string, int> strToNum;
//打表函數(shù)
void init()
{
for(int i = 0 ; i< 13 ; i++)//這是進行基礎數(shù)字的構造
{
numToStr[i] = unitDigit[i];
strToNum[unitDigit[i]] = i;
//1-12
numToStr[i*13] = tenDigit[i];
strToNum[tenDigit[i]] = i *13 ;
}
for(int i = 1 ; i < 13 ; i++)
{
for(int j = 1 ; j < 13 ; j ++)
{
string str = tenDigit[i] +" "+ unitDigit[j];
numToStr[i*13 + j] = str;
strToNum [str] =i*13 + j;
}
}
}
int main()
{
init();
int Q;//Q個詢問
scanf("%d%*c",&Q);//去除緩存區(qū)里面的回車
while(Q--)
{
string str;
getline(cin , str);
if(str[0] >= '0' && str[0] <= '9')//判定是數(shù)字
{
int num ;
num = atoi(str.c_str());
cout<<numToStr[num]<<endl;
}
else
{
cout<<strToNum[str]<<endl;
}
}
return 0 ;
}
我不想把代碼備注得太過詳細取具,影響你獨立思考的過程脖隶。
總結
一、
打表和map映射是很好的搭配暇检,解決問題起來相當容易产阱。
這里有一個小小的注意點:
代碼里scanf是
scanf("%d%*c",&Q)
實不相瞞块仆,我一開始沒有注意到心墅,只是按照
scanf("%d",&Q)
輸入的榨乎,結果提交之后一片青青草原。
我給出的解釋(我認為的解釋):
%*c作用是瘫筐,忽略這個輸入蜜暑,哪也不存儲。(拋棄)
因為我們輸入Q這個數(shù)據(jù)之后策肝,按下了回車鍵肛捍,這個回車留在了緩存區(qū)。
等到getline的時候之众,如果你沒有通過%*c拋棄掉回車拙毫,getline就會得到這個回車,也就會多一個沒有用的答案
二棺禾、
atoi
這個超贊的W禾恪!膘婶!
string str = "12345";
int num = atoi (str.c_str());
//實現(xiàn)了直接從char* 或者是string向int 的轉化
atof
這也還行缺前,就是有所精度的丟失
string str = "12345";
double num = atof (str.c_str());
我的碼云鏈接
這里面沒有什么個人的項目,我還沒到那個水平悬襟。只是先把自己的做題代碼放在這里做個成長記錄衅码。