请给出下面类的主函数 class Solution { public: char fun1(string s)//&& { for(int i=0;i<s.length();i++) if(s[i]=='f')return 'f'; return 't'; } char fun2(string s)//|| { for(int i=0;i<s.length();i++) if(s[i]=='t')return 't'; return 'f'; } bool parseBoolExpr(string expression) { stack<char>q; for(int i=0;i<expression.length();i++) { if(expression[i]==')') { string t=""; while(!q.empty()&&q.top()!='(') { t+=q.top(); q.pop(); } q.pop(); char c=q.top(); q.pop(); if(c=='&') q.push(fun1(t)); else if(c=='|') q.push(fun2(t)); else if(c=='!') { if(t=="t") q.push('f'); else q.push('t'); } } else q.push(expression[i]); } return q.top()=='t'?true:false; } }; 并实现以下功能:给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果。 有效的表达式需遵循以下约定: “t”,运算结果为 True “f”,运算结果为 False “!(expr)”,运算过程为对内部表达式 expr 进行逻辑 非的运算(NOT) “&(expr1,expr2,…)”,运算过程为对 2 个或以上内部表达式 expr1, expr2, … 进行逻辑 与的运算(AND) “|(expr1,expr2,…)”,运算过程为对 2 个或以上内部表达式 expr1, expr2, … 进行逻辑 或的运算(OR) 示例 1: 输入:expression = “!(f)” 输出:true 示例 2: 输入:expression = “|(f,t)” 输出:true 示例 3: 输入:expression = “&(t,f)” 输出:false 示例 4: 输入:expression = “|(&(t,f,t),!(t))” 输出:false 提示: 1 <= expression.length <= 20000 expression[i] 由 {’(’, ‘)’, ‘&’, ‘|’, ‘!’, ‘t’, ‘f’, ‘,’} 中的字符组成。 expression 是以上述形式给出的有效表达式,表示一个布尔值。
时间: 2024-02-06 07:02:13 浏览: 82
深入了解Java中String、Char和Int之间的相互转换
5星 · 资源好评率100%
以下是该类的主函数的实现:
```C++
class Solution {
public:
// 计算逻辑与
char fun1(string s) {
for (int i = 0; i < s.length(); i++)
if (s[i] == 'f')
return 'f';
return 't';
}
// 计算逻辑或
char fun2(string s) {
for (int i = 0; i < s.length(); i++)
if (s[i] == 't')
return 't';
return 'f';
}
// 解析布尔表达式
bool parseBoolExpr(string expression) {
stack<char> q;
for (int i = 0; i < expression.length(); i++) {
if (expression[i] == ')') { // 遇到右括号,计算表达式的值
string t = "";
while (!q.empty() && q.top() != '(') { // 取出括号内的表达式
t += q.top();
q.pop();
}
q.pop(); // 弹出左括号
char c = q.top();
q.pop(); // 弹出逻辑运算符
if (c == '&')
q.push(fun1(t)); // 计算逻辑与
else if (c == '|')
q.push(fun2(t)); // 计算逻辑或
else if (c == '!') { // 计算逻辑非
if (t == "t")
q.push('f');
else
q.push('t');
}
} else {
q.push(expression[i]); // 压入栈中
}
}
return q.top() == 't' ? true : false; // 返回栈顶元素的值
}
};
```
该函数的基本思路是用栈来计算布尔表达式的值。遍历表达式的每个字符,如果遇到右括号,则弹出栈中的元素直到遇到左括号,然后根据左括号前面的逻辑运算符,计算括号内的表达式的值,并将结果压入栈中。如果遇到其他字符,则直接压入栈中。最终,栈中剩余的元素就是整个表达式的值。
阅读全文