evildav

Evaluate simple algebraic expression

Jul 15th, 2012
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.21 KB | None | 0 0
  1. #include<iostream>
  2. #include<deque>
  3. #include<cstdlib>
  4. #include<cstring>
  5. using namespace std;
  6.  
  7. int compute(deque<int> &numbers, deque<char> &operators) {
  8.         char operation;
  9.         int operand1, operand2, t;
  10.         while(!operators.empty()) {
  11.                 operation = operators.front(); operators.pop_front();
  12.                 operand1 = numbers.front(); numbers.pop_front();
  13.                 operand2 = numbers.front(); numbers.pop_front();
  14.                 if(operation == '+') t = operand1 + operand2;
  15.                 else if(operation == '-') t = operand1 - operand2;
  16.                 else if(operation == '/') t = operand1 / operand2;
  17.                 else if(operation == '*') t = operand1 * operand2;
  18.                 numbers.push_front(t);
  19.         }
  20.         int result = numbers.front(); numbers.pop_front();
  21.         return result;
  22. }
  23.  
  24. void evaluate(char* exp) {
  25.         deque<int> numbers, numbers_brackets;
  26.         deque<char> operators, operators_brackets;
  27.         char* token = strtok(exp, " ");
  28.         while(token != NULL) {
  29.                 if(isdigit(token[0])) numbers.push_back(atoi(token));
  30.                 else if(token[0] == '+' || token[0] == '-' || token[0] == '/' || token[0] == '*') {
  31.                         operators.push_back(token[0]);
  32.                 } else if(token[0] == '(') {
  33.                         token = strtok(NULL, " ");
  34.                         while(token != NULL && token[0] != ')') { //assuming input is valid w.r.t to brackets
  35.                                 if(isdigit(token[0])) numbers_brackets.push_back(atoi(token));
  36.                                 else if(token[0] == '+' || token[0] == '-' || token[0] == '/' || token[0] ==     '*') operators_brackets.push_back(token[0]);
  37.                                 token = strtok(NULL, " ");
  38.                         }
  39.                         numbers.push_back(compute(numbers_brackets, operators_brackets)); // Compute things within bracket and push_back the result to the original stack
  40.                 }
  41.                 token = strtok(NULL, " ");
  42.         }
  43.         cout << "Ans:" << compute(numbers,operators) << endl;
  44. }
  45.  
  46. int main() {
  47.         char input[100];
  48.         scanf("%[^\n]s",input);
  49.         evaluate(input);
  50. }
Advertisement
Add Comment
Please, Sign In to add comment