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

    #include <bits/stdc++.h>
    using namespace std;
    stack<char> stack_op;
    stack<int> stack_num;
    char str[10000];
    string change;
    int pow(int x, int y)
    {
        int ans = 1;
        while (y--)
            ans *= x;
        return ans;
    }
    void cal(char op)
    {
        int a = stack_num.top();
        stack_num.pop();
        change += op;
        switch (op)
        {
        case '+':
            stack_num.top() += a;
            break;
        case '-':
            stack_num.top() -= a;
            break;
        case '*':
            stack_num.top() *= a;
            break;
        case '/':
            stack_num.top() /= a;
            break;
        case '^':
            stack_num.top() = pow(stack_num.top(), a);
        }
    }
    int ord(char op)
    {
        if (op == '(')
            return 1;
        if (op == '+' || op == '-')
            return 2;
        if (op == '*' || op == '/')
            return 3;
        if (op == '^')
            return 4;
        return 0;
    }
    bool check(char op)
    {
        if (stack_op.empty() || op == '(')
            return false;
        int now = ord(op), top = ord(stack_op.top());
        if (!now)
        {
            if (top == 1)
            {
                stack_op.pop();
                return false;
            }
            else
                return true;
        }
        return now <= top;
    }
    int main()
    {
        gets(str);
        for (int i = 0; str[i]; ++i)
        {
            if (isdigit(str[i]))
            {
                int num = str[i] - '0';
                while (isdigit(str[i + 1]))
                    num = num * 10 + str[++i] - '0';
                stack_num.push(num);
                change = change + to_string(num);
            }
            else
            {
                while (check(str[i]))
                    cal(stack_op.top()), stack_op.pop();
                if (str[i] != ')')
                    stack_op.push(str[i]);
            }
        }
        while (!stack_op.empty())
            cal(stack_op.top()), stack_op.pop();
        cout << change << endl << stack_num.top();
        system("pause");
    }
  • 相关阅读:
    JS4
    JS3
    JS2
    JS1
    Dos命令
    面向对象的复习
    9.14Css
    9.13列表的用法
    9.12Css
    9.11Css
  • 原文地址:https://www.cnblogs.com/VividBinGo/p/13763480.html
Copyright © 2011-2022 走看看