#include<iostream> #include<string> #include<map> using namespace std; map<string, int>mp; map<int, string>mp1; int main() { mp["one"]=1;mp["two"]=2;mp["three"]=3;mp["four"]=4;mp["five"]=5;mp["six"]=6;mp["seven"]=7;mp["eight"]=8;mp["nine"]=9;mp["zero"]=0; mp1[1]="one";mp1[2]="two";mp1[3]="three";mp1[4]="four";mp1[5]="five";mp1[6]="six";mp1[7]="seven";mp1[8]="eight";mp1[9]="nine";mp1[0]="zero"; int n,tag,pos1,i,pos2,num1,num2,len,start,end,cal[100],k,sum; string s,temp_s; cin>>n; while(n--){ cin>>tag; getchar(); getline(cin,s); pos1=s.find('+'); pos2=s.find('='); k=0; // cout<<pos1<<endl; //第一组数据的范围是:0,pos1-2; //第二组数据的范围是:pos1+2,pos2-2; //算第一个数字 i=0; num1=0; if(s[i]>='0'&&s[i]<='9'){//如果是数字 for(i=0;i<=pos1-2;++i){ num1=num1*10+(s[i]-'0'); } } else{//如果是字母,开始判断。直到遇到空格,或者输出结束。把找到的英语换算成数字,保存在数组当中 for(i=0;i<=pos1-2;++i){ start=i; len=1; while(i<=pos1-2 && s[i]!=' '){ i++; len++; } len--; temp_s=s.substr(start,len); num1=num1*10+mp[temp_s]; } } // cout<<num1<<endl; //接下来开始算第二个数字 i=pos1+2; num2=0; if(s[i]>='0'&&s[i]<='9'){//如果是数字 for(i=0;i<=pos2-2;++i) num2=num2*10+(s[i]-'0'); } else{//如果是字母,开始判断。直到遇到空格,或者输出结束。把找到的英语换算成数字,保存在数组当中 for(i=pos1+2;i<=pos2-2;++i){ start=i; len=1; while(i<=pos2-2 && s[i]!=' '){ i++; len++; } len--; temp_s=s.substr(start,len); num2=num2*10+mp[temp_s]; } } //cout<<num2<<endl; sum=num1+num2; if(tag==0) cout<<sum<<endl; else{ while(sum!=0){ cal[k++]=sum%10; sum/=10; } for(i=k-1;i>=0;--i){ if(i==k-1) cout<<mp1[cal[i]]; else cout<<" "<<mp1[cal[i]]; } cout<<endl; } } } |
Double click to view unformatted code.