数据结构表达式求值程序

2025-05-10 21:48:53
推荐回答(1个)
回答1:

#include
using namespace std;
int s1[100]; //操作数栈
char s2[100]; //运算符栈
int t1,t2;
void calcu() //一次计算
{
int x1,x2,x;
char p;
//弹出一个运算符
p=s2[t2--];
//弹出两个操作数
x2=s1[t1--];
x1=s1[t1--];
//进行一次运算
switch(p) {
case '+':x=x1+x2;break;
case '-':x=x1-x2;break;
case '*':x=x1*x2;break;
case '/':x=x1/x2;
}
//结果压入操作数栈
s1[++t1]=x;
}

int calculator(char *f)
{
int v,i=0;
char *p=f;
t1=t2=0; //设置空栈
while (*p!='\0')
switch(*p) {
case '+': case '-':
while (t2&&(s2[t2]!='('))
//执行先遇到的加、减、乘、除运算
calcu();
//当前运算符进栈
s2[++t2]=*p;
//读下一个字符
p++;
break;
case '*': case '/':
if (t2&&(s2[t2]=='*')||(s2[t2]=='/'))
//执行先遇到的乘、除运算
calcu();
//当前运算符进栈
s2[++t2]=*p;
//读下一个字符
p++;
break;
case '(':
//左括号进栈
s2[++t2]=*p;
//读下一个字符
p++;
break;
case ')':
while (s2[t2]!='(')
//执行括号内的加、减、乘、除运算
calcu();
//弹出左括号
t2--;
//读下一个字符
p++;
break;
default:
//把字符串转换成整数值
v=0;
do {
v=10*v+*p-'0';
p++;
} while((*p>='0')&&(*p<='9'));
//操作数进栈
s1[++t1]=v;
};
//执行先遇到的加、减、乘、除运算
while (t2) calcu();
//返回结果
return s1[t1];
}

int main()
{
char a[100];
while(1)
{
cout<<"请输入一个中序表达式: "<cin>>a;
if(a[0]=='*'||a[0]=='/')
cout<<"位置:"<<1<<", error,首字符只能是+,-,数字"<///////////5-(6/2+4)/2*3-5*2
int i=0;
while(a[i+1]!='\0')
{
if( (a[i]>'9'||a[i]<'0') && (a[i+1]>'9'||a[i+1]<'0') && (a[i+1]!='('&&a[i+1]!='(') &&
(a[i]>'9'||a[i]<'0') && (a[i+1]>'9'||a[i+1]<'0') && (a[i]!=')'&&a[i]!='(') )
cout<<"位置:"<i++;
}
///////////
i=0;
int count1=0,count2=0;
while(a[i]!='\0')
{

if(a[i]=='(')
count1++;
if(a[i]==')')
count2++;
i++;
}
if(count1cout<<"error,左括号少"<if(count1>count2)
cout<<"error,右括号少"<////////////
cout<<"结果:"<}
return 0;
}
补充:
该代码无法实现实数的运算,同时前序表达式和后序表达式都没有解决