#include "RPN.hpp" RPN::RPN(){} RPN::RPN(const RPN &other) { this->_stack = other._stack; } RPN &RPN::operator=(const RPN &other) { this->_stack = other._stack; return (*this); } RPN::~RPN(){} int RPN::compute(const std::string &string) { std::istringstream iss(string); std::string token; std::string ops = "+-*/"; int b; int a; while (iss >> token) { if (token.size() == 1) { if (isdigit(token[0])) _stack.push(token[0] - '0'); else if (ops.find(token[0]) != std::string::npos) { if (_stack.size() <= 1) throw std::runtime_error("Error"); b = _stack.top(); _stack.pop(); a = _stack.top(); _stack.pop(); switch (token[0]) { case '+': _stack.push(a + b); break; case '-': _stack.push(a - b); break; case '*': _stack.push(a * b); break; case '/': if (b == 0) throw std::runtime_error("Error"); _stack.push(a / b); break; } } else throw std::runtime_error("Error"); } else throw std::runtime_error("Error"); } if (_stack.size() != 1) throw std::runtime_error("Error"); return _stack.top(); }