#include <stdio.h>
#include <string.h>
#include <map>
#include <iostream>
using namespace std;
map<string,int> f;
int main()
{
char str[100],a[20],b[20],a1[10],a2[10],b1[10],b2[10];
int n,i,x,y;
while(gets(str))
{
int mark,sum=0;
for(i=0;i<strlen(str);i++)
if(str[i]=='+')
{
mark=i;break;
}
int j=0,k=0;
for(i=0;i<strlen(str);i++)
{
if(i<mark-1)
{a[j]=str[i];j++;}
if(i>mark+1&&i<strlen(str)-2)
{b[k]=str[i];k++;}
}
a[j]='\0';b[k]='\0';
f["zero"]=0;f["one"]=1;f["two"]=2;f["three"]=3;
f["four"]=4;f["five"]=5;f["six"]=6;f["seven"]=7;
f["eight"]=8;f["nine"]=9;
int flag1=0,flag2=0;
mark=strlen(a);
for(i=0;i<strlen(a);i++)
{
if(a[i]==' ')
{mark=i;flag1=1;}
}
for(i=0;i<mark;i++)
a1[i]=a[i];a1[i]='\0';
for(i=mark+1,j=0;i<strlen(a);i++,j++)
a2[j]=a[i];a2[j]='\0';
mark=strlen(b);
for(i=0;i<strlen(b);i++)
{
if(b[i]==' ')
{mark=i;flag2=1;}
}
for(i=0;i<mark;i++)
b1[i]=b[i];b1[i]='\0';
for(i=mark+1,j=0;i<strlen(b);i++,j++)
b2[j]=b[i];b2[j]='\0';
if(flag1&&flag2)
sum=f[a1]*10+f[a2]+f[b1]*10+f[b2];
if(flag1&&!flag2)
sum=f[a1]*10+f[a2]+f[b1];
if(!flag1&&flag2)
sum=f[a1]+f[b1]*10+f[b2];
if(!flag1&&!flag2)
sum=f[a1]+f[b1];
if(sum)
printf("%d\n",sum);
else break;
}
return 0;
}
此题写的好水。。。。
用了KTL 的map。
在字符数组赋值时,忘记加'\0'。导致WA了好多次。