devc++中缀表达式求值
时间: 2023-11-24 22:52:12 浏览: 90
string 中缀表达式求值
4星 · 用户满意度95%
在DevC++中求解中缀表达式的值可以通过以下步骤实现:
1. 创建一个操作数栈和一个操作符栈。
2. 从左到右遍历中缀表达式的每个字符。
3. 如果当前字符是数字,则将其添加到操作数栈中。
4. 如果当前字符是操作符,则进行以下操作:
- 如果操作符栈为空,或者栈顶操作符是左括号,则将当前操作符压入操作符栈。
- 否则,比较当前操作符与栈顶操作符的优先级:
- 如果当前操作符的优先级大于栈顶操作符的优先级,则将当前操作符压入操作符栈。
- 否则,循环弹出操作符栈中优先级大于等于当前操作符的操作符,并将它们添加到操作数栈中,直到遇到左括号或者操作符栈为空。然后将当前操作符压入操作符栈。
5. 如果当前字符是左括号,则将其压入操作符栈。
6. 如果当前字符是右括号,则进行以下操作:
- 循环弹出操作符栈中的操作符,并将它们添加到操作数栈中,直到遇到左括号。然后将左括号从操作符栈中弹出。
7. 遍历完中缀表达式后,循环弹出操作符栈中的所有操作符,并将它们添加到操作数栈中。
8. 最后,操作数栈中的唯一元素就是中缀表达式的求值结果。
下面是一个示例代码,演示了如何在DevC++中求解中缀表达式的值:
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int getPriority(char op) {
if (op == '+' || op == '-')
return 1;
else if (op == '*' || op == '/')
return 2;
else
return 0;
}
int evaluateInfixExpression(string expression) {
stack<int> operandStack;
stack<char> operatorStack;
for (int i = 0; i < expression.length(); i++) {
char ch = expression[i];
if (isdigit(ch)) {
int operand = ch - '0';
operandStack.push(operand);
} else if (ch == '(') {
operatorStack.push(ch);
} else if (ch == ')') {
while (!operatorStack.empty() && operatorStack.top() != '(') {
char op = operatorStack.top();
operatorStack.pop();
int operand2 = operandStack.top();
operandStack.pop();
int operand1 = operandStack.top();
operandStack.pop();
if (op == '+')
operandStack.push(operand1 + operand2);
else if (op == '-')
operandStack.push(operand1 - operand2);
else if (op == '*')
operandStack.push(operand1 * operand2);
else if (op == '/')
operandStack.push(operand1 / operand2);
}
if (!operatorStack.empty() && operatorStack.top() == '(')
operatorStack.pop();
} else {
while (!operatorStack.empty() && getPriority(operatorStack.top()) >= getPriority(ch)) {
char op = operatorStack.top();
operatorStack.pop();
int operand2 = operandStack.top();
operandStack.pop();
int operand1 = operandStack.top();
operandStack.pop();
if (op == '+')
operandStack.push(operand1 + operand2);
else if (op == '-')
operandStack.push(operand1 - operand2);
else if (op == '*')
operandStack.push(operand1 * operand2);
阅读全文