fork download
  1. #include<iostream>
  2. #include<stack>
  3. using namespace std;
  4.  
  5. bool evaluate(const char *expression, int &result);
  6. int calculate( int value1, int value2, char operation);
  7. int main()
  8. {
  9. int result = 0;
  10. char input[100];
  11. cout<<"Enter an algebraic expression to evaluate ";
  12. cin>>input;
  13.  
  14. if (evaluate(input,result))
  15. cout<<endl<<"The value of the evaluated expression is "<< result;
  16. else
  17. cout<<endl<<"Please enter a valid expression to evaluate";
  18. }
  19.  
  20. bool evaluate(const char *expression, int &result)
  21. {
  22. stack<int> operands;
  23. stack<char> operators;
  24.  
  25. while(*expression != '\0')
  26. {
  27. if(*expression == ' ')
  28. {
  29. *expression++;
  30. continue;
  31. }
  32.  
  33. else if(isdigit(*expression))
  34. {
  35. int number = 0;
  36. while(isdigit(*expression))
  37. {
  38. number = number *10 + (*expression - '0') ;
  39. *expression++;
  40. }
  41. operands.push(number);
  42. }
  43.  
  44. else if(*expression == '(')
  45. {
  46. operators.push(*expression);
  47. }
  48.  
  49. else if(*expression == '+' || *expression == '-' || *expression == '*' || *expression == '/')
  50. {
  51. operators.push(*expression);
  52. }
  53.  
  54. else if(*expression == ')')
  55. {
  56. while(!operators.empty() && operators.top() != '(')
  57. {
  58. int value2 = operands.top();
  59. operands.pop();
  60. int value1 = operands.top();
  61. operands.pop();
  62. char op = operators.top();
  63. operators.pop();
  64. operands.push(calculate(value1, value2, op));
  65. }
  66. if(!operators.empty())
  67. operators.pop();
  68. }
  69.  
  70. else
  71. {
  72. return(false);
  73. }
  74. *expression++;
  75. }
  76.  
  77. while(operands.size()!= 0)
  78. {
  79. int value2 = operands.top();
  80. operands.pop();
  81. int value1 = operands.top();
  82. operands.pop();
  83. char op = operators.top();
  84. operators.pop();
  85. operands.push(calculate(value1, value2, op));
  86. }
  87. return(true);
  88. }
  89.  
  90. int calculate( int value1, int value2, char operation)
  91. {
  92. switch(operation){
  93. case '+': return value1 + value2;
  94. case '-': return value1 - value2;
  95. case '*': return value1 * value2;
  96. case '/': return value1 / value2;
  97. }
  98. }
  99.  
Success #stdin #stdout 0s 4364KB
stdin
Standard input is empty
stdout
Enter an algebraic expression to evaluate 
Please enter a valid expression to evaluate