文章

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() &&...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发