我不应该回答这个代码有什么问题-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;
}
答案 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));