13
IDEA
1.需要将相关字符存起来,采用map键值对存储,火星文为key,地球文为value
2.根据输入的字符串首字符判断输出的是地球文还是火星文
3.还需要判断输入火星文是一位的还是两位的
3.用到int sprintf( char *buffer, const char *format [, argument] … );把格式化的数据写到字符串中,如sprintf(s,"%d",num);
CODE
#include<iostream> #include<cstring> #include<map> #include<cstdlib> using namespace std; int main(){ map<string,int> m; m["tret"]=0; m["jan"]=1;m["feb"]=2;m["mar"]=3;m["apr"]=4;m["may"]=5;m["jun"]=6; m["jly"]=7;m["aug"]=8;m["sep"]=9;m["oct"]=10;m["nov"]=11;m["dec"]=12; m["tam"]=13;m["hel"]=26;m["maa"]=39;m["huh"]=52;m["tou"]=65;m["kes"]=78; m["hei"]=91;m["elo"]=104;m["syy"]=117;m["lok"]=130;m["mer"]=143;m["jou"]=156; char s1[12][4]={"jan", "feb", "mar", "apr", "may", "jun", "jly", "aug", "sep", "oct", "nov", "dec"}; char s2[12][4]={"tam", "hel", "maa", "huh", "tou", "kes", "hei", "elo", "syy", "lok", "mer", "jou"}; int n; cin>>n; cin.get(); //while(n--){ for(int i=0;i<n;i++){ string str,result; getline(cin,str); if(str=="tret"){ cout<<0<<endl; }else if(str=="0"){ cout<<"tret"<<endl; }else if(isdigit(str[0])){//输入的是地球文 数字0-169 int num=atoi(str.c_str()); int k1,k2; k1=num%13;//个位 k2=num/13;//十位 if(k2){ if(k1){ result=s2[k2-1]; result+=" "; result+=s1[k1-1]; }else{ result=s2[k2-1]; } }else{ result+=s1[k1-1]; } cout<<result<<endl; }else if(str.size()==3){//输入的是一个火星文 char s[4]; sprintf(s,"%d",m[str]); result=s; cout<<result<<endl; }else if(str.size()==7){//输入的是两个火星文字 string sub; int num; sub=str.substr(0,3);//十位0 1 2 ,3位是空格 num=m[sub]; sub=str.substr(4,3);//个位4 5 6 num+=m[sub]; char s[4]; sprintf(s,"%d",num); result=s; cout<<result<<endl; } } return 0; }