one + two = 3.求大神找错误。。

__103__ 2013-04-24 12:36:58
Description读入两个小于100的正整数A和B,计算A+B。需要注意的是:A和B的每一位数字由对应的英文单词给出。

Input测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。

Output对每个测试用例输出1行,即A+B的值。


Sample Input

one + two =
three four + five six =
zero seven + eight nine =
zero + zero =


Sample Output

3
90
96

以下是我的代码。



#include<stdio.h>
#include<string.h>
int j;
int main()
{
int a,b;
char p[30],str[14]="zero + zero =";
int match (char p[]);
int i,t,flag=0,m,k;
while(gets(p)!=NULL)
{
k=strcmp(str,p);
if(k==0)
return 0;
m=strlen(p);
b=match(p);
for(i=j+1,t=0;i<m;i++,t++)
p[t]=p[i];
if(p[0]!='+')
{
b=b*10+match(p);
for(i=j+1,t=0;i<m;i++,t++)
p[t]=p[i];
}
else
{
flag=1;
for(i=2,t=0;i<m;i++,t++)
p[t]=p[i];
a=match(p);
for(i=j+1,t=0;i<m;i++,t++)
p[t]=p[i];
}
if(p[0]=='=')
{
printf("%d\n",a+b);
j=0;
flag=0;
continue;
}
else
{
if(flag==1)
b=b*10+match(p);

else
{
for(i=2,t=0;i<m;i++,t++)
p[t]=p[i];
a=match(p);
}
}
for(i=j+1,t=0;i<m;i++,t++)
p[t]=p[i];
if(p[0]=='=')
{
printf("%d\n",a+b);
j=0;
flag=0;
continue;
}
else
{
a=a*10+match(p);
printf("%d\n",a+b);
j=0;
flag=0;
}
}
return 0;
}

int match(char p[])
{
int i,a;
char num[10][6]={"zero","one","two","three","four","five","six","seven","eight","nine"};
for(i=0;i<10;i++)
{
for(j=0;num[i][j]!='\0';j++)
{
if(num[i][j]!=p[j])
break;
}
if(num[i][j]=='\0')
{
a=i;
break;
}
}
return a;
}




...全文
192 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
a784063999 2013-04-24
  • 打赏
  • 举报
回复
int match (char p[]); char p[]是聲明變量?
14号选手 2013-04-24
  • 打赏
  • 举报
回复
我自己写了一个,希望能帮到你,呵呵
#include <stdio.h>
#include <string.h>
#define max 50
char dest[10][max]={"zero","one","two","three","four","five","six","seven","eight","nine"};
char str[max];//输入
char temp[max];//用于缓存字符串
int m,n,s1,s2;//s1,s2存放+两边的数值

void input(char *string)
{
int k=0,len;
while(gets(string))
{
//getchar();
len=strlen(string);
for(int i=0;i<len;i++)
if(string[i]==' ')
k++;
if(k<=5)
break;
else
{
k=0;
printf("输入错误,请重新输入:\n");
continue;
}
}
}

//该函数传递数值
int function(char *string)
{
for(int i=0;i<10;i++)
{
if(strcmp(string,dest[i])==0)
break;
}
return i;
}

void oprate(char *string1,char *string2)
{
char temp_char;
while(1)
{
for(int i=0;string1[i]!=' ';i++);
strncpy(string2,string1,i);//截取字符串
string2[i]='\0';
temp_char=*(string1+i+1);//判断是否为'+'
if(temp_char!='+'&&temp_char!='=')
{
for(int j=0;j<10;j++)
if(!strcmp(string2,dest[j]))
{
//存放数值
m=function(dest[j])*10;
n+=m;
}
string1+=(i+1);//验证完毕之后,指针完后移动
}
else
{
if(temp_char=='=')
{
for(int j=0;j<10;j++)
if(!strcmp(string2,dest[j]))
{
//存放数值
m=function(dest[j]);
n+=m;
s2=n;
n=0;
}
}
else
{
for(int j=0;j<10;j++)
if(!strcmp(string2,dest[j]))
{
//存放数值
m=function(dest[j]);
n+=m;
s1=n;
n=0;
}
}
string1+=(i+3);//验证完毕之后,指针完后移动
}
if(temp_char=='=')
break;
}
}

int main(void)
{
char ch;
printf("输入任意键继续(q退出):\n");
while((ch=getchar())!='q')
{
getchar();
printf("请输入:\n");
input(str);
oprate(str,temp);
printf("结果如下:\n");
printf("%d + %d =%d\n",s1,s2,s1+s2);
printf("输入任意键继续(q退出):\n");
}
return 0;
}


zwfars 2013-04-24
  • 打赏
  • 举报
回复
引用 7 楼 zhao4zhong1 的回复:
单步调试和设断点调试是程序员必须掌握的技能之一。
+1,但是我看到好多厉害的都不调的,很显然我不是那些厉害的。。。。
赵4老师 2013-04-24
  • 打赏
  • 举报
回复
单步调试和设断点调试是程序员必须掌握的技能之一。
__103__ 2013-04-24
  • 打赏
  • 举报
回复
果然是。。谢谢大神。。
a784063999 2013-04-24
  • 打赏
  • 举报
回复
if(flag==1) b=b*10+match(p); 這應該是a=a*10+match(p);
__103__ 2013-04-24
  • 打赏
  • 举报
回复
不是这个问题。。样例的输出是对的。但是提交到oj上却是wrong answer。
a784063999 2013-04-24
  • 打赏
  • 举报
回复
搞錯,原來match有用到j 我認為用cin遂個字符串讀會更好
a784063999 2013-04-24
  • 打赏
  • 举报
回复
int j; j應該初始化為0

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧