使用c++写一个逻辑运算计算器
时间: 2024-10-27 17:11:09 浏览: 25
在C++中编写一个逻辑运算计算器,通常会涉及用户输入、解析表达式以及计算结果。这里提供一个简单的控制台版逻辑运算计算器的示例:
```cpp
#include <iostream>
#include <string>
#include <cctype> // 包含处理字符的函数
// 定义运算符优先级
enum class Priority { AND = 0, OR = 1 };
class Calculator {
public:
int calculate(const std::string& expression) {
stack<int> values;
stack<char> operators;
for (char c : expression) {
if (isdigit(c)) {
int value = 0;
while (isdigit(c)) {
value = value * 10 + (c - '0');
++c;
}
values.push(value);
} else if (c == '(') {
operators.push(c);
} else if (c == ')') {
while (!operators.empty() && operators.top() != '(') {
char op = operators.top();
values.push(apply_operator(values.top(), values.pop(), op));
operators.pop();
}
if (!operators.empty()) {
operators.pop(); // 弹出左括号
}
} else {
while (!operators.empty() && precedence(op(c)) >= precedence(operators.top())) {
values.push(apply_operator(values.top(), values.pop(), operators.top()));
operators.pop();
}
operators.push(c);
}
}
while (!operators.empty()) {
values.push(apply_operator(values.top(), values.pop(), operators.top()));
operators.pop();
}
return values.top();
}
private:
int apply_operator(int a, int b, char op) {
switch (op) {
case '&': return a & b; // 逻辑与
case '|': return a | b; // 逻辑或
default: throw std::invalid_argument("Invalid operator");
}
}
static Priority precedence(char op) {
return op == '&' ? Priority::AND : Priority::OR;
}
};
int main() {
Calculator calc;
std::string input;
std::cout << "请输入逻辑表达式(如:A&B 或 A|B):" << std::endl;
getline(std::cin, input);
try {
int result = calc.calculate(input);
std::cout << "计算结果为: " << result << std::endl;
} catch (const std::invalid_argument& e) {
std::cerr << "错误: " << e.what() << std::endl;
}
return 0;
}
```
这个程序首先定义了一个Calculator类,其中包含calculate函数,用于解析和计算逻辑表达式。然后在main函数中获取用户的输入,并调用calculate函数计算结果。
阅读全文