文章
5
粉丝
7
获赞
9
访问
563
比较好理解的,代码有些冗余,但思路比较清晰
#include <iostream>
#include <stack>
#include <map>
#include <cctype>
using namespace std;
int main()
{
// 运算符优先级映射:'/' 和 '*' 优先级为 1,'+' 和 '-' 优先级为 0
map<char, int> mp;
mp['/'] = 1;
mp['*'] = 1;
mp['+'] = 0;
mp['-'] = 0;
stack<int> st1; // 数字栈
stack<char> st2; // 运算符栈
string str;
cin >> str; // 读取输入的表达式
for (int i = 0; i < str.size(); i++)
{
if (isdigit(str[i])) // 如果是数字(支持多位数)
{
int num = 0;
while (i < str.size() && isdigit(str[i])) // 处理多位数
{
num = num * 10 + (str[i] - '0');
i++;
}
i--; // 因为 for 循环还会 i++,这里回退一个字符
st1.push(num); // 将解析出的完整数字压入数字栈
}
else // 处理运算符
{
// 只要运算符栈不为空,且栈顶运算符优先级 >= 当前运算符优先级,则先计算栈内的运算
while (!st2.empty() &&...
登录后发布评论
暂无评论,来抢沙发