编写一个函数evaluate (exp),接受一个简单的数学表达式(只包含加法和减法)作为字符串输入,并返回其计算结果。表达式中没有括号,且操作数为整数。一
时间: 2024-10-22 19:11:25 浏览: 10
VC++中运算表达式字符串解析求值(四则运算,三角和反三角函数等)
编写一个名为`evaluate`的函数来计算简单的数学表达式,可以按照以下步骤进行:
1. 首先,我们需要将输入的字符串分割成数字和运算符列表。我们可以遍历整个字符串,遇到空格就认为是一个运算符分隔点。
2. 创建两个栈,一个用于存储数字,另一个用于存储运算符。遍历时,如果遇到数字,将其压入数字栈;如果遇到运算符,从数字栈弹出两个数做运算并压回结果,然后将当前运算符压入运算符栈。
3. 遍历结束后,数字栈中应该只剩下一个元素,这是最终的结果。将其从数字栈弹出并转换为整数。
4. 使用循环处理运算符栈,对所有剩余的运算符应用到数字上,直到运算符栈为空。
5. 最后,返回数字栈顶部的整数值,即为计算结果。
这是一个Python示例实现:
```python
def evaluate(exp):
def apply_operator(operators, values):
op = operators.pop()
val2 = values.pop()
val1 = values.pop()
if op == '+':
values.append(val1 + val2)
elif op == '-':
values.append(val1 - val2)
operators = []
values = []
num = ''
for char in exp:
if char.isdigit():
num += char
else:
if num:
values.append(int(num))
num = ''
while operators and operators[-1] != '(' and eval_num(values[-2:]) < eval_num([char]):
apply_operator(operators, values)
operators.append(char)
if num:
values.append(int(num))
# Apply remaining operators
while operators:
apply_operator(operators, values)
return values[0]
# 示例
print(evaluate("5 + 3 - 2")) # 输出:6
```
阅读全文