题目描述
帮助小明解决逻辑运算
输入
一个字符串(串长小于255)表达逻辑式子,内只包含true,false,or,and,not和空格,(不包含括号和xor),优先级同pascal.(not->and->or),同级左边先算,如果逻辑式有误则输出 error。
输出
运算结果:true 或者 false ,如果无法得到结果的输出error
样例输入
true or false and false
样例输出
true
Code:
#include<bits/stdc++.h>
using namespace std;
stack<int>stack_int;
stack<bool>stack_bool;
void pop1(bool bool1,bool bool2){
if(stack_bool.size()<2){
cout<<"error";
exit(0);
}
bool1=stack_bool.top();
stack_bool.pop();
bool2=stack_bool.top();
stack_bool.pop();
stack_bool.push(bool1||bool2);
}
void pop2(bool bool1,bool bool2){
if(stack_bool.size()<2){
cout<<"error";
exit(0);
}
bool1=stack_bool.top();
stack_bool.pop();
bool2=stack_bool.top();
stack_bool.pop();
stack_bool.push(bool1&&bool2);
}
void pop3(bool bool1){
if(stack_bool.empty()){
cout<<"error";
exit(0);
}
bool1=stack_bool.top();
stack_bool.pop();
stack_bool.push(!bool1);
}
void pop(){
bool bool1,bool2;
if(stack_int.top()==3){
pop3(bool1);
}else if(stack_int.top()==2){
pop2(bool1,bool2);
}else if(stack_int.top()==1){
pop1(bool1,bool2);
}
stack_int.pop();
}
int main(){
string str;
while(cin>>str){
if(str=="or"){
while(!stack_int.empty()){
pop();
}
stack_int.push(1);
}else if(str=="and"){
while(!stack_int.empty()&&stack_int.top()>=2){
pop();
}
stack_int.push(2);
}else if(str=="not"){
stack_int.push(3);
}else if(str=="true"){
stack_bool.push(true);
}else if(str=="false"){
stack_bool.push(false);
}
}
while(!stack_int.empty()){
pop();
}
if(stack_bool.size()==1){
if(stack_bool.top()==true){
cout<<"true";
}else{
cout<<"false";
}
}else{
cout<<"error";
}
return 0;
}
/**************************************************************
Problem: 3044
User: yangrenrui
Language: C++
Result: 正确
Time:16 ms
Memory:2196 kb
****************************************************************/
标签:false,int,stack,bool,str,true,3044
From: https://blog.csdn.net/yangrenrui/article/details/136660764