算符优先分析算法的c++代码
时间: 2023-08-21 20:09:06 浏览: 56
以下是算符优先分析算法的 C++ 代码实现:
```c++
#include <iostream>
#include <stack>
#include <unordered_map>
#include <string>
using namespace std;
// 定义运算符优先级映射表
unordered_map<char, int> priority = {
{'+', 1},
{'-', 1},
{'*', 2},
{'/', 2}
};
// 判断是否为运算符
bool isOperator(char c) {
return priority.count(c);
}
// 判断运算符优先级
bool hasHigherPriority(char op1, char op2) {
return priority[op1] >= priority[op2];
}
// 计算表达式的值
int calculate(char op, int num1, int num2) {
switch (op) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
return num1 / num2;
default:
return 0;
}
}
// 进行算符优先分析算法
int evaluate(string expression) {
stack<int> nums;
stack<char> ops;
for (int i = 0; i < expression.length(); i++) {
char c = expression[i];
if (isdigit(c)) {
int num = 0;
while (i < expression.length() && isdigit(expression[i])) {
num = num * 10 + (expression[i] - '0');
i++;
}
i--;
nums.push(num);
} else if (isOperator(c)) {
while (!ops.empty() && hasHigherPriority(ops.top(), c)) {
int num2 = nums.top();
nums.pop();
int num1 = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
nums.push(calculate(op, num1, num2));
}
ops.push(c);
}
}
while (!ops.empty()) {
int num2 = nums.top();
nums.pop();
int num1 = nums.top();
nums.pop();
char op = ops.top();
ops.pop();
nums.push(calculate(op, num1, num2));
}
return nums.top();
}
int main() {
string expression = "3+4*5-6/2";
int result = evaluate(expression);
cout << "The result is: " << result << endl;
return 0;
}
```
以上代码通过使用两个栈分别存储数字和运算符,遍历表达式并进行计算,最终返回表达式的值。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)