题目要求:
读入两个小于100的正整数A和B,计算A+B。需要注意的是:A和B的每一位数字由对应的英文
单词给出。
具体的输入输出格式规定如下:
输入格式:测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两
字符串有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。
输出格式:对每个测试用例输出1行,即A+B的值。
输入样例:
one + two
three four + five six
zero seven + eight nine
zero + zero
输出样例:
The result is 3
The result is 90
The result is 96
附加要求:
(1)不能用string.h及其相关库函数
(2)出错检测机制
下面的程序是我自己写的,还请大家指教!
/*在VC 6.0 下调试通过*/
#include <stdio.h>
#define ERROR 300
char *num[10]={"zero\n","one\n","two\n","three\n","four\n","five\n","six\n","seven\n","eight\n","nine\n"};
char a[15],b[15];
int Compare(char *a,char *b,int length);
int GetNumber(char *s);
int GetStringLength(char *s);
int GetFinger(char *s);
void main()
{
char temp;
int i=0,j=0,num1=0,num2=0;
int flag=0;
do
{
printf("Please input your commend like this: (three four + five six)\n ");
scanf("%c",&temp);
while(temp!='\n')
{
if(temp=='+')
{
flag=1;
}
if(flag==0)
{
a=temp;
i++;
}
else
{
b[j]=temp;
j++;
}
scanf("%c",&temp);
}
b[j]='\n';
a[i-1]='\n';
i=0;
j=0;
/*去掉b[]中前面的一个加号和一个空格*/
while(b!='\n')
{
b=b[i+2];
i++;
}
i=0;j=0;
flag=0;
num1=GetFinger (a);
num2=GetFinger (b);
if(num1==0 && num2==0)
break;
if(num1==ERROR || num2==ERROR)
break;
printf("\nThe reuslt is: %d+%d=%d\n",num1,num2,num1+num2);
}while(1);
}
/*从num[]数组中找到与输入的s相应的数字*/
int GetNumber(char *s)
{
int i=0;
for(i=0;i<10;i++)
{
if(Compare(s,num,GetStringLength(s)))
return i;
}
return 10;
}
/*比较两个字符串是否相等*/
int Compare(char *a,char *b,int length)
{
for(int i=0;i<=length;i++)
{
if(a!=b)
break;
}
if(i-1==length)
return 1;
else
return 0;
}
int GetStringLength(char *s)
{
int i=0;
while(s!='\n')
{
i++;
}
return i;
}
/*将形如three one的字符串转换成31这样的数字*/
int GetFinger(char *s)
{
char a1[10],a2[10];
int i=0,j=0,k=0,temp,a;
while(s!=' ' && s!='\n')
{
a1[j]=s;
i++;
j++;
}
a1[j]='\n';
temp=GetNumber (a1);
if(temp==10)
{
printf("\nyou have a error number:");
while(a1[k]!='\n')
{
printf("%c",a1[k]);
k++;
}
return ERROR;
}
a=temp;
j=0;
if(s==' ')
{
i++;
while(s!='\n')
{
a2[j]=s;
j++;
i++;
}
a2[j]='\n';
temp=GetNumber (a2);
if(GetNumber (a2)==10)
{
k=0;
printf("\nyou have a error number:");
while(a2[k]!='\n')
{
printf("%c",a2[k]);
k++;
}
return ERROR;
}
a=a*10+temp;
}
return a;
} |