与之前解决的四则表达式很相似,原因在于四则表达式也是递归的概念
#include <iostream> #include <cstdio> using namespace std; char wholeExp[1500];//表示整个表达式的字符串 int ptr = 0; bool exp();//读入一个表达式并返回其值 bool item();//读入一个项并返回其值 bool factor();//读入一个因子并返回其值 bool notExp();//将表达式取反的操作 bool exp() { bool result = item(); while(wholeExp[ptr]=='|') { ptr++;//注意先移动下标,才可以进行下面的计算 result = result | item(); } return result; } bool item() { bool result = factor(); while(wholeExp[ptr]=='&') { ptr++; result = result & factor(); } return result; } bool factor() { bool result; switch (wholeExp[ptr]) { case 'F': ptr++; result=false; return result; break; case 'V': ptr++; result=true; return result; break; case '(': ptr++; result = exp(); ptr++; return result; break; case '!': result = notExp(); return result; break; } } bool notExp() { ptr++;//注意这里的下标移动放在了函数体内 bool result; switch (wholeExp[ptr]) { case 'F': ptr++; result=true; return result; break; case 'V': ptr++; result=false; return result; break; case '(': ptr++; result = exp(); ptr++; return !result; break; case '!': result = notExp(); return !result; break; } } int main() { char c; int i = 0; int n = EOF + 1; while(n != EOF) { n = scanf("%c",&c); if( n == EOF || c == '\n') { wholeExp[i] = '\0'; if( i > 0) { ptr = 0; bool res = exp(); if (res) { printf("V\n"); } else printf("F\n"); } i = 0; } else if( c != ' ') wholeExp[i++] = c; } return 0; }