简单的算术表达式求助高手帮忙
#include<iostream>
#include<string>
#include<math.h>
using namespace std;
char precede(char a,char b)
{
int i,j;
char com[8][8]={
' ','+','-','*','/','(',')','#',
'+','>','>','<','<','<','>','>',
'-','>','>','<','<','<','>','>',
'*','>','>','>','>','<','>','>',
'/','>','>','>','>','<','>','>',
'(','<','<','<','<','<','=',' ',
')','>','>','>','>',' ','>','>',
'#','<','<','<','<','<',' ','=',
};
for(i=0;i<8;i++)
if(com[i][0]==a)break;
for(j=0;j<8;j++)
if(com[0][j]==b) break;
return com[i][j];
}
int in(char c)
{
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#'||c=='.') return 1;
else return 0;
};
float operate(float a,char b,float c){
float d=a;
switch(b){
case'+':
d=a+c;
break;
case'-':
d=a-c;
break;
case'*':
d=a*c;
break;
case'/':
d=a/c;
break;
}
return d;
};
struct sign
{
int top;
char a[200];
};
char pop(sign &b)
{
char d;
if(b.top<0)
{
cout<<"栈空"<<endl;
return '0';
}
else
{
d=b.a[b.top];
b.top--;
return d;
}
};
void push(sign &b,char k)
{
if(b.top>200)
{
cout<<"栈满"<<endl;
}
else
{
b.top++;
b.a[b.top]=k;
}
};
char gettop(sign &b)
{
char e;
if(b.top==-1 ) return 0;
e=b.a[b.top-1];
return e;
}
struct number
{
int top;
float aa[200];
};
float pop1(number &c)
{
float d;
if(c.top<0)
{
cout<<"栈空"<<endl;
return 0;
}
else
{
d=c.aa[c.top];
c.top--;
return d;
}
};
void push1(sign &c,float k)
{
if(c.top>200)
{
cout<<"栈满"<<endl;
}
else
{
c.top++;
c.a[c.top]=k;
}
};
float change(char *l,int &i)
{
float sum=0,num=0.1;
while(!in(l[i]))
{
if(l[i]!='.')
{
sum=sum*10+l[i]-'0';
}
else
{
sum=sum+(l[i]-'0')*num;
num=num*0.1;
}
i++;
}
return sum;
};
float menu()
{
char yy[200];
char tt;
float vv=0;
int j=0;
sign a;
a.top=-1;
number s;
s.top=-1;
cout<<"输入算术表达式(以#结束)"<<endl;
cin>>yy;
push(a,'#');
while(yy[j]!='#')
{
if(!in(yy[j]))
{
push1(s,change(yy,j));
}
else
{
tt=precede(gettop(a),yy[j]);
switch(tt) ))
{
case'<':
push(a,yy[j]);
j++;
break;
case'>':
vv=operate(pop1(s),pop(a),pop1(s));
push1(s,vv);
j++;
break;
case'=':
pop(a);
j++;
break;
}
}
}
}
void main()
{
cout<<menu();
}