1、“*”符:用以表示该输入项,读入后不赋予相应的变量,即跳过该输入值。
如:
scanf("%d %*d %d",&a,&b);
当输入为:1 2 3时,把1赋予a,2被跳过,3赋予b。
%*c作用时读取输入流中数字后的一个字符,并丢弃,使得后面的输入函数不能读到那个字符
2、当输入是13的整数的时候直接输出一个字符串而不是2个,比如26要输出hel而不是hel tret
3、字符串的读入方式要进行区分;
4、substr的应用要牢记,和sort对长度的要求差不多
#include<iostream>
#include<string>
#include<vector>
#include<map>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
void num2str(int a,map<int,string> mm){
if(a<=13||a%13==0){
cout<<mm[a]<<endl;
}else{
cout<<mm[(a/13)*13]<<' '<<mm[a%13]<<endl;
//cout<<mm[a]<<endl;
}
}
int str2num(string s,map<string,int> mm){
return mm[s];
}
int main()
{
map<string,int> m1;
m1["tret"]=0;m1["jan"]=1;m1["feb"]=2;m1["mar"]=3;m1["apr"]=4;m1["may"]=5;m1["jun"]=6;m1["jly"]=7;
m1["aug"]=8;m1["sep"]=9;m1["oct"]=10;m1["nov"]=11;m1["dec"]=12;m1["tam"]=13;m1["hel"]=26;m1["maa"]=39;
m1["huh"]=52;m1["tou"]=65;m1["kes"]=78;m1["hei"]=91;m1["elo"]=104;m1["syy"]=117;m1["lok"]=130;m1["mer"]=143;
m1["jou"]=156;
map<int,string> m2;
m2[0]="tret";m2[1]="jan";m2[2]="feb";m2[3]="mar";m2[4]="apr";m2[5]="may";m2[6]="jun";m2[7]="jly";
m2[8]="aug";m2[9]="sep";m2[10]="oct";m2[11]="nov";m2[12]="dec";
m2[13]="tam";m2[26]="hel";m2[39]="maa";m2[52]="huh";m2[65]="tou";m2[78]="kes";m2[91]="hei";
m2[104]="elo";m2[117]="syy";m2[130]="lok";m2[143]="mer";m2[156]="jou";
int n;
//cin>>n;
scanf("%d%*c",&n);
for(int i=0;i<n;i++){
string s;
getline(cin,s);
if(s[0]<='9'&&s[0]>='0'){
int ans=0;
for(int j=0;j<s.size();j++){
//ans+=(s[j]-'0')*((int)pow(10,s.size()-j-1));
ans=ans*10+(s[j]-'0');
}
num2str(ans,m2);
}else{
int count=0;
//cout<<s.size()<<endl;
if(s.size()>3){
int k=0;
int c1=str2num((s.substr(k,k+3)),m1);
int c2=str2num((s.substr(k+4,k+7)),m1);
//cout<<c1<<' '<<c2<<' '<<(s.substr(k,k+2))<<' '<<(s.substr(k,k+2))<<endl;
count=c1+c2;
}else{
int k=0;
int c1=str2num((s.substr(k,k+3)),m1);
count=c1;
}
cout<<count<<endl;
}
}
return 0;
}