描述
小航比较粗心,判断他写的表达式是否正确。
输入
多组数据,直到文件结束。每行输入 a 运算符号 b 关系符号 c ,(0<=a,b,c<=9),用英文字母表示。
运算符号 "+", "-", "*" or "/" and 关系符号 ">", "<" ,"=","<=" or ">="。
输出
首先若出现除零的情况,输出expression false,否则若表达式正确并且精确,输出true,再其次表达式不正确的话输出正确并且精确的表达式。输出格式参照样例。
样例输入
one+two=three
two-three=zero
five/four>one
nine*nine<=zero
样例输出
true
two-three < zero
true
nine*nine > zero
提示
例如4/4>=1是正确的,但不是精确地,正确并且精确地是4/4=1。
有点坑,“精确的”意思是“>=”和“<=”必定是不精确的。
我是先把三个数提取出来的,但是标记了运算符和关系符的位置再判断的。
#include<stdio.h>
#include<string.h>
#include<string>
#include<math.h>
#include<vector>
#include<map>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
char shu[15][15]={"zero","one","two","three","four","five","six","seven","eight","nine"};
char s[105];
int len,i,j,k,a,b,c,o,f1,f2,op;
double d;
while(scanf("%s",s)!=EOF)
{
char sa[20],sb[20],sc[20];
len=strlen(s);op=0;
//第一个数
for(i=0;i<len;i++)
{
if(s[i]>='a'&&s[i]<='z')
{
o=0;
for(j=i;j<len;j++)
{
if(!(s[j]>='a'&&s[j]<='z'))
{f1=j;break;}
sa[o++]=s[j];
}
sa[o]='\0';
//printf("%s\n",sa);
for(k=0;k<10;k++)
{
if(strcmp(sa,shu[k])==0)
{
a=k;
break;
}
}
break;
}
}
//第二个数
for(i=f1+1;i<len;i++)
{
if(s[i]>='a'&&s[i]<='z')
{
o=0;
for(j=i;j<len;j++)
{
if(!(s[j]>='a'&&s[j]<='z'))
{f2=j;break;}
sb[o++]=s[j];
}
sb[o]='\0';
//printf("%s\n",sb);
for(k=0;k<10;k++)
{
if(strcmp(sb,shu[k])==0)
{
b=k;
break;
}
}
break;
}
}
//第三个数
for(i=f2+1;i<len;i++)
{
if(s[i]>='a'&&s[i]<='z')
{
o=0;
for(j=i;j<len;j++)
{
if(!(s[j]>='a'&&s[j]<='z'))
{break;}
sc[o++]=s[j];
}
sc[o]='\0';
//printf("%s\n",sc);
for(k=0;k<10;k++)
{
if(strcmp(sc,shu[k])==0)
{
c=k;
break;
}
}
break;
}
}
//printf("%d %d %d\n",a,b,c);
if(s[f1]=='+')
d=a+b;
else if(s[f1]=='-')
d=a-b;
else if(s[f1]=='*')
d=a*b;
else if(s[f1]=='/')
{
if(b==0)
{
printf("expression false\n");
op=1;
}
if(op==0)
d=1.0*a/b;
}
//printf("%d\n",d);
//printf("%c\n",s[f2]);
if(op==0)
{
int flag=0;
if(s[f2]=='=')
{
if(d==c)
flag=1;
}
else if(s[f2]=='>')
{
if(s[f2+1]=='=')
{
//if(d>c)
//flag=1;
//else if(d==c)
flag=0;
}
else
{
if(d>c)
flag=1;
}
}
else if(s[f2]=='<')
{
if(s[f2+1]=='=')
{
//if(d<c)
//flag=1;
//else if(d==c)
flag=0;
}
else
{
if(d<c)
flag=1;
}
}
if(flag)
printf("true\n");
else
{
printf("%s%c%s",shu[a],s[f1],shu[b]);
if(d==c)
printf(" = ");
else if(d>c)
printf(" > ");
else if(d<c)
printf(" < ");
printf("%s\n",shu[c]);
}
}
}
}