/*
英文算数计算系统
从键盘输入两个小于100的整数A和B,计算A与B两数的基本算数运算。需要注意的是:A和B的每一位数位上的数字由对应的英文单词给出。
系统要求:
(1)系统由菜单做导航,给出输入数据功能、退出程序功能、数据输入功能并能够循环输入执行运算等。
(2)在数据运算输入功能菜单下分别给出A与B的相加运算、A与B的相乘运算、A与B的相减运算、A与B的相除运算、A与B的相除取于运算等功能。
(3)当A输入为zero,同时B输入为zero时自动返回菜单上一级。
输入样例:
one + two =
three four + five six =
zero seven + eight nine =
zero + zero =
输出样例:
one + two = three
three four + five six = nine zero
zero seven + eight nine = nine six
*/
#include
#include
#include
#define N 30 //定义最大30个测试用例
char a[N][50]; //定义每个测试用例可以有50个字符
char comp[10][6] = {"zero","one","two","three","four","five","six","seven","eight","nine"};
int val[N];
void StringBracket(char *str)//删除空格
{
int i,j,len;
len=strlen(str);
j=0;
for(i=0; i<len; i++)
{
if(str[i]!=' ')
{
str[j]=str[i];
j=j+1;
}
}
str[j]='\0';
}
char calval(char *str) //计算每个表达式的值
{
int i,j,len,y;
int a1=0,a2=-1,b1=0,b2=-1;//每个表达式最多有4个整数
char str1[20],str2[20];//分解为两个字符串
char stra1[10],stra2[10]={0},strb1[10],strb2[10]={0};//每个字符串最多分解为两个子串
len=strlen(str);
for(i=0; i<len; i++)
{
str1[i]=str[i];
if(str[i]=='+'|| str[i]=='-'|| str[i]=='*'|| str[i]=='/'|| str[i]=='%')
{
str1[i]='\0';
for(j=i+1; j<len; j++)
str2[j-i-1]=str[j];
str2[len-i-2]='\0';
break;
}
}
len=strlen(str1);
for(i=0; i<len; i++)
{
stra1[i]=str1[i];
if(i>1 && str1[i]==' ')
{
stra1[i]='\0';
for(j=i+1; j<len; j++)
stra2[j-i-1]=str1[j];
stra2[len-i-1]='\0';
break;
}
}
len=strlen(str2);
for(i=0; i<len; i++)
{
strb1[i]=str2[i];
if(i>1 && str2[i]==' ') //i>1表示不考虑前面的空格
{
strb1[i]='\0';
for(j=i+1; j<len; j++)
strb2[j-i-1]=str2[j];
strb2[len-i-1]='\0';
break;
}
}
StringBracket(stra1);
StringBracket(stra2);
StringBracket(strb1);
StringBracket(strb2);
for(i=0; i<10; i++)
{
if(strcmp(stra1,comp[i])==0) a1=i;
if(strcmp(stra2,comp[i])==0) a2=i;
if(strcmp(strb1,comp[i])==0) b1=i;
if(strcmp(strb2,comp[i])==0) b2=i;
}
if(a2>=0) a1=a1*10+a2; //a2初始化为-1,>=0表示为两位数
if(b2>=0) b1=b1*10+b2;
switch(y)
{
case 1:
return a1+b1;
break;
case 2:
return a1-b1;
break;
case 3:
return a1*b1;
break;
case 4:
return a1/b1;
break;
case 0:
return a1%b1;
break;
default:
printf(" 输入错误,请重新输入\n");
}
}
int main()
{
int i,j,n=0;
int y;
char str[10];
printf("|--------------------------------|\n");
printf("| 英文算数计算系统 |\n");
printf("| 1--加法运算 |\n");
printf("| 2--减法运算 |\n");
printf("| 3--乘法运算 |\n");
printf("| 4--除法运算 |\n");
printf("| 0--相除取余运算 |\n");
printf("|--------------------------------|\n\n");
printf("|你想要进行哪一种运算(0-4) |\n");
scanf("%d",&y);
system("pause");
system("cls");
printf("Please input numbers:\n");
while(1)
{
gets(a[n]);
val[n]=calval(a[n]);
if(val[n]==0)
break;
n++;
if(n>=N)
break;
}
printf("Output:\n");
for(i=0;i<n;i++)
{
if (val[i]>0)
{
itoa(val[i], str, 10);//整数转换为字符串
printf("%s ",a[i]);//输出原表达式
for(j=0;j<strlen(str);j++)
{
printf("%s ",comp[str[j]-0x30]);
}
}
printf("\n");
}
return 0;
}