前缀表达式计算(栈的使用)

Posted lhlccc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前缀表达式计算(栈的使用)相关的知识,希望对你有一定的参考价值。

#include <bits/stdc++.h>
using namespace std;
string s;
stack<double>ac;
bool op(char c){
    if(c==‘+‘||c==‘-‘||c==‘*‘||c==‘/‘){
        return 1;
    }
    else return 0;
}
int main(){
        getline(cin,s);
        while(!ac.empty()){
            ac.pop();
        }
        int len=s.length();
        int n=1;
        double num=0;
        int flag=0;
        for(int i=len-1;i>=0;i--){
            if(s[i]>=‘0‘&&s[i]<=‘9‘){
                num+=(s[i]-‘0‘)*n;
                n*=10;
            }
            else if(s[i]==‘.‘){
                num=num/(n*1.0);
                n=1;
            }
            else if((s[i]==‘+‘||s[i]==‘-‘)&&num!=0){
                if(s[i]==‘+‘){
                    ac.push(num);
                    i--;
                    continue;
                }
                else{
                    num=-num;
                    ac.push(num);
                    i--;
                    continue;
                }
            }
            else if(s[i]==‘ ‘){
                ac.push(num);
                num=0;
                n=1;
                continue;
            }
            else if(op(s[i])){
                double a=ac.top();
                ac.pop();
                double b=ac.top();
                ac.pop();
                double t=0;
                if(s[i]==‘+‘){
                    t=a+b;
                }
                else if(s[i]==‘-‘){
                    t=a-b;
                }
                else if(s[i]==‘*‘){
                    t=a*b;
                }
                else if(s[i]==‘/‘){
                    if(b==0){
                        flag=1;
                        break;
                    }
                    t=a/b;
                }
                ac.push(t);
                i--;
            }
        }
        if(flag==0){
            printf("%.1f ",ac.top());
        }
        else{
            printf("ERROR ");
        }
    return 0;
}

以上是关于前缀表达式计算(栈的使用)的主要内容,如果未能解决你的问题,请参考以下文章

(王道408考研数据结构)第三章栈和队列-第三节1:栈的应用之括号匹配问题和表达式问题(前缀中缀和后缀)

前缀式计算(前缀表达式)

王道3.3 栈的应用以及队列的应用

栈的应用—算术表达式求值

栈与队列应用:计算前缀表达式的值

前缀中缀后缀表达式以及简单计算器的实现