知识点:栈的应用
语法经验,主函数外的函数中的指针变量不能付给主函数中的指针,因为函数调用完后就会释放内存,赋值相当于没赋
#include<iostream>
using namespace std;
const int maxn=110;
void trans(char *exp,char *atexp);
int oc( char *s);
int main()
{
int t=1,jud;
char exp[maxn];
char atexp[maxn];
while(cin.getline(exp,maxn))
{
trans(exp,atexp);
jud=oc(atexp);
char fi=jud?'V':'F';
cout<<"Expression "<<t<<": "<<fi<<endl;
t++;
}
return 0;
}
void trans(char *exp,char *atexp)
{
char st[maxn];
int top=-1;
int i=0,j=0;
char tem=exp[i++];
while(tem!='\0')
{
if(tem==' ');
else if(tem=='V'||tem=='F')
{
atexp[j++]=tem;
}
else if(tem=='|')
{
while(top>-1&&(st[top]=='&'||st[top]=='!'||st[top]=='|'))
{
atexp[j++]=st[top--];
}
st[++top]=tem;
}
else if(tem=='&')
{
while(top>-1&&(st[top]=='!'||st[top]=='&'))
{
atexp[j++]=st[top--];
}
st[++top]=tem;
}
else if(tem=='!')
{
st[++top]=tem;
}
else if(tem=='(')
{
st[++top]=tem;
}
else
{
while(st[top]!='('){
atexp[j++]=st[top--];
}
top--;
}
tem=exp[i++];
}
while(top>-1)
{
atexp[j++]=st[top--];
}
atexp[j]='\0';///////
}
int oc(char *s)
{
int op[maxn];
int top=-1;
int i=0;
while(s[i]!='\0')
{
if(s[i]=='V')
op[++top]=1;
else if(s[i]=='F')
op[++top]=0;
else
{
switch (s[i])
{
case '|':
op[top-1]|=op[top];
top--;break;
case '&':
op[top-1]&=op[top];
top--;break;
case '!':
op[top]=!op[top];break;
}
}
i++;
}
return op[top];
}