请设计并实现一个中缀数学表达式(类似:5+3*(7+8)-6)的计算。 1. 假设条件 (1) 表达式中可能有左右小括弧; (2) 运算符为加、减、乘和除; (3) 参与运算的数字都是1个字符; (4) 运算符为1个字符
时间: 2024-10-05 19:04:38 浏览: 18
要设计和实现一个中缀数学表达式的计算器,可以使用递归解析法或者栈的数据结构。这里我会给出一个简单的Python示例,它会使用栈来处理这个问题:
```python
class Calculator:
def __init__(self):
self.operators = {'+', '-', '*', '/'}
self.stack = []
def is_number(self, token):
try:
float(token)
return True
except ValueError:
return False
def apply_operator(self):
right = self.pop()
left = self.pop()
operator = self.pop()
if operator == '+':
result = left + right
elif operator == '-':
result = left - right
elif operator == '*':
result = left * right
else:
assert operator == '/'
result = left / right
self.stack.append(result)
def precedence(self, op):
return {
'+': 1,
'-': 1,
'*': 2,
'/': 2,
}[op]
def calculate(self, expression):
tokens = list(expression)
i = 0
while i < len(tokens):
token = tokens[i]
if self.is_number(token):
self.stack.append(float(token))
elif token in self.operators:
while (i + 1 < len(tokens) and
tokens[i + 1] != '(' and
self.precedence(tokens[i + 1]) >= self.precedence(token)):
self.apply_operator()
i += 1
self.stack.append(token)
elif token == ')':
while self.stack[-1] != '(':
self.apply_operator()
self.stack.pop()
i += 1
while self.stack:
self.apply_operator()
return self.stack.pop()
# 使用示例
calc = Calculator()
expression = "5+3*(7+8)-6"
result = calc.calculate(expression)
print(f"结果是: {result}")