zoukankan      html  css  js  c++  java
  • 后缀算术表达式

    后缀表达式的特点如下:

    1、后缀表达式的操作数与中缀表达式的操作数先后次序相同,而运算符的先后次序不同。

    2、后缀表达式中没有括号,而且运算符没有优先级。

    3、后缀表达式计算过程严格按照从左到右的顺序进行。

    例如:

    算术表达式a+(b-c)*d的后缀式是:abc-d*+

    在输入的时候出了问题:

    string s;

    cin>>s;  不能输入空格

    所以要用getline 

    getline(cin,s);

    头文件 string 或者istream

    #include<iostream>
    #include<string> 
    #include<istream>
    #include<cstring>
    #include<iomanip>
    using namespace std;
    typedef struct StackNode *LStack;
    struct StackNode {
        double nu;
        LStack next;
    };
    void Init(LStack &s)
    {
        s = new StackNode;
        s = NULL;
    }
    void Pushnu(LStack &s, double c)
    {
        LStack p = new StackNode;
        p->nu = c;
        p->next = s;
        s = p;
    }
    void Pop(LStack &s)
    {
        LStack p;
        p = s;
        if (!s->next)
            s = NULL;
        else
            s = s->next;
        delete p;
    }
    double GetTopnu(LStack &s)
    {
        return s->nu;
    }
    int main()
    {
        string s;
        s = "";
        cout << setiosflags(ios::fixed) << setprecision(2);
        while (s != "=")
        {
            getline(cin, s);
            char *ptr;
            int length = 0;
            LStack p;//s1是数字,s2是运算符
            Init(p);
            for (int i = 0; i <s.size(); i++)
            {
                if (s[i] >= '0'&&s[i] <= '9')
                {
                    Pushnu(p, s[i] - 48);
                }
                else
                    if (s[i] == '+')
                    {
                        double a, b;
                        a = GetTopnu(p);
                        Pop(p);
                        b = GetTopnu(p);
                        Pop(p);
                        double c;
                        c = a + b;
                        Pushnu(p, c);
                    }
                    else
                    {
                        if (s[i] == '-')
                        {
                            double a, b;
                            a = GetTopnu(p);
                            Pop(p);
                            b = GetTopnu(p);
                            Pop(p);
                            double c;
                            c = b - a;
                            Pushnu(p, c);
                        }
                        else
                            if (s[i] == '*')
                            {
                                double a, b;
                                a = GetTopnu(p);
                                Pop(p);
                                b = GetTopnu(p);
                                Pop(p);
                                double c;
                                c = b * a;
                                Pushnu(p, c);
                            }
                            else
                            {
                                if (s[i] == '/')
                                {
                                    double a, b;
                                    a = GetTopnu(p);
                                    Pop(p);
                                    b = GetTopnu(p);
                                    Pop(p);
                                    double c;
                                    c = b / a;
                                    Pushnu(p, c);
                                }
                                else
                                    if (s[i] == '=')
                                        break;
                                    else
                                        if (s[i] == ' ')
                                        {
                                            
                                            continue;
                                        }
    
                            }
    
                    }
            }
            if (s == "=")
                return 0;
            cout << p->nu << endl;
        }
        return 0;
    }
  • 相关阅读:
    poj1088 经典dp
    poj2301
    poj1050(nyoj104 zoj1074)dp问题
    hdu1003
    poj1001(高精度)
    图的深度优先遍历DFS
    jquery中attr和prop的区别
    Apache 配置域名入口路径
    关于启动定时器和取消定时器的问题
    Web攻防之XSS,CSRF,SQL注入
  • 原文地址:https://www.cnblogs.com/h694879357/p/11767445.html
Copyright © 2011-2022 走看看