紧急求救!!Segmentation Fault !!!各位大哥救命啊……
原题链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2483
提交以后提示Segmentation Fault ……到底哪里错了啊……
希望各位高手帮帮忙啊……
题意大概是输入类似( V | V ) & F & ( F| V)的表达式然后判断真假(V代表true)
//zoj2483
#include <iostream>
#include <stack>
using namespace std;
char And(char m,char n)
{
if(m=='V'&&n=='V') {m='V';return m;}
else {m='F';return m;}
}
char Or(char m,char n)
{
if(m=='F'&&n=='F') {m='F';return m;}
else {m='V';return m;}
}
char Fei(char m)
{
if(m=='V') {m='F';return m;}
else {m='V';return m;}
}
int main()
{
char a;
char g[21];
int j=1;
while(cin>>a)
{
int i=0;
char t,m,n,re;
stack <int>s;
stack <int>y;
if(a!=' ')
{g[i]=a;i++;}
while(cin.get(a)&&a!='\n')
{
if(a!=' ')
{
g[i]=a;
i++;
}
}
g[i]='\0';
i=0;
while(g[i]!='\0')
{
if(g[i]=='V'||g[i]=='F')
s.push(g[i]);
else
{
switch(g[i])
{
case '&':if(y.empty()||y.top()=='|'||y.top()=='(')
y.push(g[i]);
else
{
t=y.top();
y.pop();
if(t=='!') {m=s.top();s.pop();re=Fei(m);s.push(re);}
else {m=s.top();s.pop();n=s.top();s.pop();re=And(m,n);s.push(re);}
y.push(g[i]);
}break;
case '!':if(y.empty()||y.top()=='|'||y.top()=='('||y.top()=='&') y.push(g[i]);
else
{
y.pop();
m=s.top();
s.pop();
re=Fei(m);
s.push(re);
y.push(g[i]);
}
break;
case '|':if(y.empty()||y.top()=='(') y.push(g[i]);
else
{
t=y.top();
y.pop();
if(t=='!') {m=s.top();s.pop();re=Fei(m);s.push(re);}
else if(t=='&') {m=s.top();s.pop();n=s.top();s.pop();re=And(m,n);s.push(re);}
else if(t=='|') {m=s.top();s.pop();n=s.top();s.pop();re=Or(m,n);s.push(re);}
y.push(g[i]);
}
break;
case '(':y.push(g[i]);
break;
case ')':
while(y.top()!='(')
{
t=y.top();
y.pop();
if(t=='!') {m=s.top();s.pop();re=Fei(m);s.push(re);}
else if(t=='&') {m=s.top();s.pop();n=s.top();s.pop();re=And(m,n);s.push(re);}
else if(t=='|') {m=s.top();s.pop();n=s.top();s.pop();re=Or(m,n);s.push(re);}
}
y.pop();
}
}
i++;
}
while(!y.empty())
{
t=y.top();
y.pop();
if(t=='!') {m=s.top();s.pop();re=Fei(m);s.push(re);}
else if(t=='&') {m=s.top();s.pop();n=s.top();s.pop();re=And(m,n);s.push(re);}
else if(t=='|') {m=s.top();s.pop();n=s.top();s.pop();re=Or(m,n);s.push(re);}
}
t=s.top();
s.pop();
cout<<"Expression "<<j<<":"<<t<<endl;
j++;
}
return 0;
}