布尔表达式
描述 | |
输入一个布尔表达式,请你输出它的真假值。 比如:( V | V ) & F & ( F | V ) V表示true,F表示false,&表示与,|表示或,!表示非。 上式的结果是F |
|
关于输入 | |
输入包含多行,每行一个布尔表达式,表达式中可以有空格,总长度不超过1000 | |
关于输出 | |
对每行输入,如果表达式为真,输出"V",否则出来"F" | |
例子输入 | |
( V | V ) & F & ( F| V)
|
|
例子输出 | |
F
|
#include <iostream> #include <string.h> #include <memory> using namespace std; char str[1500], equ[1500]; char sign[1000]; int num[1000]; int s = 0, n = 0, co = 0; //定义s,n,co,分别为当前指向的sign数组中符号的位置,num数组中数字的位置,equ数组中元素的位置 void cal() //设定一个函数cal用以两个数之间的计算,并且赋值到前一个数,并相应改变指向位置 { if (sign[s - 1] == '*') { num[n - 2] = num[n - 1] * num[n - 2]; n = n - 1; s--; } else if (sign[s - 1] == '+') { num[n - 2] = num[n - 1] + num[n - 2]; n = n - 1; s--; } } int solve() //定义一个solve函数用来 对算式进行处理 遇到数字放入num中 遇到符号 如果是运算符 比较其与sign中前一个放入的符号的优先级 如果是左括号 放入sign中 调用cal计算 递归 { if (co == strlen(equ) && s == 0) //出口是遍历了算式中每一个元素并且sign中的符号都用光了 return num[0]; if (equ[co] <= '9'&&equ[co] >= '0') { num[n++] = equ[co++] - '0'; return solve(); } else { if (co <= strlen(equ) - 1) { if (s == 0 || equ[co] == '(') { sign[s++] = equ[co++]; return solve(); } else { if (equ[co] == ')') { while (sign[s - 1] != '(') cal(); sign[s - 1] = '