zoukankan      html  css  js  c++  java
  • 中缀表达式转后转表达式

    记录一下这个恶心的字符串模拟

    #include <bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        map<char, int> mp;
        string str;
        stack<char> s;
        cin >> str;
        bool isFirst = true;
        mp['-'] = 1, mp['+'] = 1;
        mp['*'] = 2, mp['/'] = 2;
        mp['('] = 3, mp[')'] = 3;
        for (int i = 0; i < str.size(); i++)
        {
            if ((i == 0 || str[i - 1] == '(') && (str[i] == '+' || str[i] == '-') || (str[i] >= '0' && str[i] <= '9') || str[i] == '.') //读入运算数/正负号(区别于加减号)/小数点
            {
                if (!isFirst)
                {
                    cout << " ";
                }
                if (str[i] != '+') //省略正号
                    cout << str[i];
                while (str[i + 1] == '.' || (str[i + 1] >= '0' && str[i + 1] <= '9')) //处理多位数
                {
                    i++;
                    cout << str[i];
                }
                isFirst = false;
            }
            else
            {
                if (str[i] == ')') //处理右括号
                {
                    while (!s.empty() && s.top() != '(')
                    {
                        cout << " " << s.top();
                        s.pop();
                    }
                    s.pop(); //弹出左括号
                }
                else if (s.empty() || mp[str[i]] > mp[s.top()]) //如果栈空||当前运算符优先级大于栈顶运算符优先级
                {
                    s.push(str[i]);
                }
                else //当前运算符优先级小于等于栈顶运算符优先级
                {
                    while (!s.empty() && s.top() != '(')
                    {
                        cout << " " << s.top();
                        s.pop();
                    }
                    s.push(str[i]); //将当前运算符压栈
                }
            }
        }
        while (!s.empty()) //将剩余元素弹栈
        {
            cout << " " << s.top();
            s.pop();
        }
    }
    
    
  • 相关阅读:
    科普园地
    专家段 错误 新闻
    16进制转rgb
    图片截取0825
    域名的问题 图片显示不出来
    height cell0809
    添加银行卡
    DeviceDelegateHelper.m
    UUID
    MBProgressHUD 动画
  • 原文地址:https://www.cnblogs.com/Nepenthe8/p/13842147.html
Copyright © 2011-2022 走看看