关于堆栈RPN程序上的char / int运行良好

时间:2015-04-10 16:08:31

标签: c++ int stack double rpn

在以下网站中:http://blockofcodes.blogspot.com/2014/08/postfix-evaluation-using-cpp-stack.html

如果我输入的值如1.62 3.5 + 2.7 * 那么返回值不是十进制值。

我将int改为double,但它仍然给我一个错误。任何人都可以给我一个输入吗?

谢谢!

    #include <stdio.h>
    #include <iostream>
    #include <stdlib.h>
    #include <stack>
    #include <string.h>

   using namespace std;

  bool isOperator(char ch)
 {
  if (ch=='+' || ch=='-' || ch=='*' || ch=='/')
      return true;
  else
      return false;
 }


int performOperation(int op1, int op2, char op)
{
  int ans;
  switch(op){
case '+':
    ans = op2 + op1;
    break;
case '-':
    ans = op2 - op1;
    break;
case '*':
    ans = op2 * op1;
    break;
case '/':
    ans = op2 / op1;
    break;
}
return ans;
 }


  int main()
  {
   char exp[1000], buffer[15];
   int i,op1, op2, len, j, x;
stack<int> s;
printf("Enter a Postfix Expression: ( e.g. 23 34 * )\n");
gets(exp);
len = strlen(exp);
j = 0;
for(i=0; i<len;i++){

    if(exp[i]>='0' && exp[i]<='9'){
        buffer[j++] = exp[i];
    }
    else if(exp[i]==' '){
        if(j>0){
            buffer[j] = '\0';
            x = atoi(buffer);
            s.push(x);
            j = 0;
        }
    }

    else if(isOperator(exp[i])){
        op1 = s.top();
        s.pop();
        op2 = s.top();
        s.pop();
        s.push(performOperation(op1, op2, exp[i]));
    }
}

printf("Answer is %d\n", s.top());

return 0;

}

1 个答案:

答案 0 :(得分:0)

将操作数存储在整数堆栈上,而不是浮点类型。

stack<int> s更改为stack<double> s

此外,op1op2也是int,应该是doubles

我不停地看着这一点。确保你正在处理浮点类型。