英文单词模拟数学运算问题
大家帮忙看下,我严格按照标准输入,但是输出不了结果,还有开头那部分char dictionary[10][6]={"zero","one","two","three","four","five","six","seven","eight","nine"};为什么要那么定义,我找了好久都是这么定义
#include<stdio.h>
#include<string.h>
char dictionary[10][6]={"zero","one","two","three","four","five","six","seven","eight","nine"};
int count(char *content)//计算函数,形参为输入的字符串,输入为A[20][20]
{
char A1[10],A2[10],oper,B1[10],B2[10]; //第一个数的十位、个位、运算符、第二个数的十位、个位
int i; //遍历输入的字符串
int start; //起始位置
int bit[2]; //对应的数字,0:第一个数字,1:第二个数字
int result; //存储计算结果
int flag[2]={0,0}; //标记两个数的位数,0:1位数,1:两位数,初始化为个位数
for(i=0,start=0;*(content+i)!=' ';i++,start++) //读取第一个运算符的个位(也可能是十位)
{
A1[start] = *(content+i);
}
A1[start]='\0';
if(*(content+i+1)!='+'&&*(content+i+1)!='-'&&*(content+i+1)!='*'&&*(content+i+1)!='/')//若后边的字母不是'+''-''*''/'符号则说明刚才读的是十位,则继续读取第一个数的个位
{
flag[0] = 1; //第一个数标记为十位数
for(i++,start=0;*(content+i)!=' ';i++,start++)
{
A2[start] = *(content+i);
}
A2[start]='\0'; //最后一个位置赋结束符,下同
}
oper = *(content+i+1); //此时oper读到的一定是运算符(例one three + four =)
i+=3; //跳到运算符后的第一个字母处
for(start=0;*(content+i)!=' ';i++,start++)
{
B1[start] = *(content+i);
}
B1[start]='\0';
if(*(content+i+1)!='=') //若后边的字母不是‘=’号则说明刚才读的是十位数,则继续读取第二个数的个位
{
flag[1] = 1; //第二个数标记为十位数
for(i++,start=0;*(content+i)!=' ';i++,start++)
{
B2[start] = *(content+i);
}
B2[start]='\0';
}
//下面开始转化为对应的数字
if(0==flag[0]&&0==flag[1])//都是一位数的情况
{
for(i=0;i<10;i++)
{
if(!strcmp(dictionary[i],A1))
{
bit[0]=i;
}
if(!strcmp(dictionary[i],B1))
{
bit[1]=i;
}
}
}
else
if(1==flag[0]&&0==flag[1])//二位数和位一数的情况
{
for(i=0;i<10;i++)
{
if(!strcmp(dictionary[i],A1))
{
bit[0]=i*10; //第一个数的十位
}
if(!strcmp(dictionary[i],B1))
{
bit[1]=i; //第二个数的个位(是一位数,不考虑十位)
}
}
for(i=0;i<10;i++)
{
if(!strcmp(dictionary[i],A2))
{
bit[0]+=i;//第一个数再加上个位
}
}
}
else
if(0==flag[0]&&1==flag[1])//一位数和二位数的情况
{
for(i=0;i<10;i++)
{
if(!strcmp(dictionary[i],A1))
{
bit[0]=i; //第一个数的个位(是一位数,不考虑十位)
}
if(!strcmp(dictionary[i],B1))
{
bit[1]=i*10; //第二个数的十位
}
}
for(i=0;i<10;i++)
{
if(!strcmp(dictionary[i],B2))
{
bit[1]+=i;//第二个数再加上个位
}
}
}
else
if(1==flag[0]&&1==flag[1])//都是二位数的情况
{
for(i=0;i<10;i++)
{
if(!strcmp(dictionary[i],A1))
{
bit[0]=i*10;
}
if(!strcmp(dictionary[i],B1))
{
bit[1]=i*10;
}
}
for(i=0;i<10;i++)
{
if(!strcmp(dictionary[i],A2))
{
bit[0]+=i;
}
if(!strcmp(dictionary[i],B2))
{
bit[1]+=i;
}
}
}
switch(oper)//检查运算符,进行计算
{
case '+':result = bit[0] + bit[1];break;
case '-':
case '*':
case '/':result = -1;break;
default:result = bit[0] + bit[1]; //默认为加
}
return result;
}
int isZero(char *str)//检查输入是否为两个zero
{
int i;
char t[2][5];
for(i=0;i<4;i++)
{
t[0][i] = *(str+i);
t[1][i] = *(str+i+7);
}
t[0][i]=t[1][i]='\0';
if(!strcmp(t[0],"zero")&&!strcmp(t[1],"zero"))
return 1;
else
return 0;
}
int main()
{
char A[20][20];//输入的字符串,设置为最多20个,可以改
int answer;//运算存储结果
int num = -1,i;
char a='+';
do
{
gets(A[++num]);
}while(!isZero(A[num]));//输入的两个数为zero则结束输入
for(i=0;i<num;i++)
{
answer = count(A[i]);
if (answer=-1)
printf("输入格式错误,请重新输入");
if(0==answer/10)
printf("%s\n",dictionary[answer]);
else
if(0==answer/100)
printf("%s %s\n",dictionary[answer/10],dictionary[answer%10]);
else
printf("%s %s %s\n",dictionary[answer/100],dictionary[answer/10%10],dictionary[answer%10]);
}
return 0;
}