逻辑表达式求值

#include <bits/stdc++.h>
using namespace std;
/*
中缀逻辑表达式转后缀逻辑表达式

测试用例:
0&(0|1|0)

答案:
001|0|&
*/
unordered_map<char, int> g{{'|', 1}, {'&', 2}};
string s, t;
stack<char> stk;

int main() {
    cin >> s;
    for (int i = 0; i < s.size(); i++) {
        if (isdigit(s[i]) || isalpha(s[i]))
            t += s[i];
        else if (s[i] == '(')
            stk.push(s[i]);
        else if (s[i] == ')') {
            while (stk.top() != '(') {
                t += stk.top();
                stk.pop();
            }
            stk.pop();
        } else {
            while (stk.size() && g[s[i]] <= g[stk.top()]) {
                t += stk.top();
                stk.pop();
            }
            stk.push(s[i]);
        }
    }
    while (stk.size()) {
        t += stk.top();
        stk.pop();
    }
    cout << t << endl;
    return 0;
}

posted @   糖豆爸爸  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2022-03-30 树上差分
2022-03-30 AcWing 352 . 闇の連鎖
2022-03-30 AcWing 356 次小生成树
2020-03-30 dubbo-go
2019-03-30 NOIP2017普及组初赛试题及答案
2019-03-30 NOIP2018普及初赛解析
Live2D
点击右上角即可分享
微信分享提示