在c ++中使用stl评估后缀表达式

时间:2017-06-27 08:22:12

标签: c++ stl stack

我不应该回答这个代码有什么问题-4 但我得到的答案是2492

#include <bits/stdc++.h>
using namespace std;

int main() {
    stack <int> st;

   char s[]="231*+9-" ;

    for(int i=0;i<7;i++){

        if (isdigit(s[i])){
            st.push((int)s[i]);

        }
        else{
            float val1,val2;
            val1=st.top();
            st.pop();
            val2=st.top();
            st.pop();
           switch (s[i])
            {
             case '+': st.push( val2 + val1); break;
             case '-': st.push(val2 - val1); break;
             case '*': st.push( val2 * val1); break;
             case '/': st.push( val2/val1);   break;

            }
        }

    }int m=st.top();
    cout<<m;
    return 0;
}

2 个答案:

答案 0 :(得分:1)

如果您想要数字值,则无法将数字char直接转换为int,因为这只会提供其ASCII代码。相反,请st.push((int)(s[i]-'0'))。这将删除0-9字符组的偏移量。

答案 1 :(得分:0)

一种简单的方法是将char s[]="231*+9-替换为字符串string s ="231*+9-" 然后创建一个size_t的别名,这样就可以将char作为substr推送:

std::string::size_type sz;
...
st.push(stoi(s.substr(i,1), &sz));