计算表达式

计算表达式

http://www.nowcoder.com/questionTerminal/7b18aa6b7cc14f8eaae6b8acdebf890b

这才是面试官想看到的

#include<iostream>
#include<stack>
#include<string>
using namespace std;
int getleval(char op){
    if(op=='*'||op=='/'){
        return 3;
    }else if(op=='+'||op=='-'){
        return 2;
    }else if(op=='$'){
        return 1;
    }else return 0;
}
float compute(float x,float y,char op){
    if(op=='*'){
        return x*y;
    }else if(op=='/'){
        return x/y;
    }else if(op=='+'){
        return x+y;
    }else return x-y;
}
int main(){
    string s;
    stack<float> num;
    stack<char> op;
    op.push('#');
    while(cin>>s){
        s+='$';
        int i=0;
        while(i<s.size()){
            if(s[i]>='0'&&s[i]<='9'){
                float res=0;
                while(s[i]>='0'&&s[i]<='9'){
                    res=res*10+s[i]-'0';
                    i++;
                }num.push(res);
            }else{
                if(getleval(op.top())<getleval(s[i])){
                    op.push(s[i++]);
                }else{
                    char o=op.top();
                    op.pop();
                    float num2=num.top();
                    num.pop();
                    float num1=num.top();
                    num.pop();
                    num1=compute(num1,num2,o);
                    num.push(num1);
                }
            }
        }cout<<num.top()<<endl;
        num.pop();op.pop();
    }
    return 0;
}
全部评论
运算符优先级较小应该要连续弹栈,直到栈为空或者当前运算符优先级大于栈顶运算符才停止
4 回复 分享
发布于 2021-07-07 23:47
唤醒我数据结构的记忆,谢谢您
点赞 回复 分享
发布于 05-30 23:35 湖南
对 我就是面试官 我特别爱看
点赞 回复 分享
发布于 2021-03-03 12:24
代码挺工整,但有点小错误
点赞 回复 分享
发布于 2021-02-14 15:51
带括号时应该怎么修改呢
点赞 回复 分享
发布于 2020-04-08 09:59

相关推荐

点赞 评论 收藏
分享
活泼的代码渣渣在泡池...:哈哈哈挺好的,我也上岸美团了,不说了,我又接了一单
点赞 评论 收藏
分享
评论
20
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务