zoukankan      html  css  js  c++  java
  • 四则运算表达式求值——中缀表达式转后缀及计算

    http://acm.zjnu.edu.cn/DataStruct/showproblem?problem_id=1004

    题解:表达式计算 书上的模板

    #define _CRT_SECURE_NO_WARNINGS
    #include<stdio.h>
    #include<stdlib.h>
    #include<string>
    #include<string.h>
    #include<stack>
    #include<iostream>
    #include<list>
    using namespace std;
    const int maxn = 1e5 + 5;
    stack<char>opr;
    list<char> ans;
    stack<int>num;
    
    int cal(int aa, char o, int bb) {
        int a = aa;
        int b = bb;
        switch (o) {
        case'/':return a / b;
        case'*':return a*b;
        case'-':return a - b;
        case'+':return a + b;
        }
    }
    string mp[7];
    //+-* / (  ) 
    //01234 5
    string ofrd = "+-*/()#";
    int id(char c) {
        return ofrd.find(c);
    }
    
    
    
    char cmp(char a, char b) {
        return mp[id(a)][id(b)];
    }
    string ex;
    int main() {
        mp[0] = mp[1] = ">><<<>>";
        mp[2] = mp[3] = ">>>><>>";
        mp[4] = "<<<<<=>";
        mp[5] = ">>>> >>";
        mp[6] = "<<<<< =";
        while (cin >> ex) {
            ex += '#';
            //ex = '#' + ex;
            while (!opr.empty())opr.pop();
            while (!num.empty())num.pop();
            ans.clear();
            int len = ex.length();
            int i = 0;
            opr.push('#');
            while (ex[i] != '#' || opr.top() != '#') {
                if (ex[i] >= '0'&&ex[i] <= '9') { num.push(ex[i] - '0'); ans.push_back(ex[i]); i++; }
                else {
                    switch (cmp(opr.top(), ex[i])) {
                    case'<':
                        opr.push(ex[i]);
                        i++;
                        break;
                    case'=':
                        opr.pop();
                        i++;
                        break;
                    case'>':
                        char c = opr.top();
                        opr.pop();
                        int  a = num.top(); num.pop();
                        int b = num.top(); num.pop();
                        ans.push_back(c);
                        a = cal(b, c, a);
                        
                        num.push(a);
    
    
                        break;
                    }
                }
            }
            cout << ans.front(); ans.pop_front();
            for (auto t : ans)cout<< ' ' << t ;
            cout << endl;
            cout << num.top() << endl; num.pop();
        }
    
    }
     
    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    27. Remove Element
    26. Remove Duplicates from Sorted Array
    643. Maximum Average Subarray I
    674. Longest Continuous Increasing Subsequence
    1. Two Sum
    217. Contains Duplicate
    448. Find All Numbers Disappeared in an Array
    566. Reshape the Matrix
    628. Maximum Product of Three Numbers
    UVa 1349 Optimal Bus Route Design (最佳完美匹配)
  • 原文地址:https://www.cnblogs.com/SuuT/p/8921467.html
Copyright © 2011-2022 走看看