帮忙修改一下,实在不会了

来源:百度知道 编辑:UC知道 时间:2024/06/17 13:30:45
输入待计算的逻辑表达式及变元的真值,计算该表达式的真值。
支持的逻辑运算包括
否定 !
合取 +
析取 -
蕴含 #
等价 $
输入时用上面相应的符号表示。输入的表达式中每个逻辑运算符及其相应的操作数结合在一起用一对圆括号括起来。
例如:
输入表达式:((!((a+b)#(a-b)))$c)
输入a的真值: 1
输入b的真值: 0
输入c的真值: 0
计算的结果:?
提示:利用栈完成。
是啊,就是弄不懂栈了。
for(int a5=0;a[a5]!='\0';a5++)
{
cout<<endl<<"a5 "<<a5<<endl;
if(a[a5]!=')')
{
cout<<a[a5]<<" ";
push(&s1,a[a5]);
}
else
{
a6=a5-1;
while(a[a6]!='(')
{
if(a[a6]=='!'||a[a6]=='+'||a[a6]=='-'||a[a6]=='#'||a[a6]=='$')
{
fu=a[a6];
pop(&s1);
a6--;
}
else
{
push(&s2,pop(&s1));
a6--;
}
}
if(top(&s1)=='(')
pop(&s1);
cout<<endl;
x1=pop(&s2);
x2=pop(&s2);
xx=jisuan(x1,x2,fu);
push(&s1,xx);}
}
要怎么改啊

用两个堆栈就可以完成了啊
《数据结构》上有用堆栈计算机表达式的例子啊

补充:
你给的程序不完整,要在这个基础上改,还不如从头写了

给你重新写了一个,利用函数递归实现
#include<iostream>
using namespace std;
int p(0);
bool result(0);
void main()
{
void fenxi(char a[]);
void change(char a[]);
bool yanzheng(char a[]);
char str[100]={'\0'};
cout<<" 计算逻辑表达式真值~~"<<endl;
cout<<"请输入您要计算的逻辑表达式:"<<endl;
cin>>str;
if(yanzheng(str))
{
change(str);
fenxi(str);
cout<<"您输入的表达式的真值为:"<<result<<endl;
}
else
cout<<"表达式非法~~"<<endl;
}
bool yanzheng(char a[])
{
char tmp[100]={'\0'};
int top(0),i(0);
while(a[i]!='\0'&&top!=-1)
{
if(a[i]=='(')
{
if(a[i+1]==')'||a[i+1]=='+'||a[i+1]=='-'||a[i+1]