Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <cstdlib>
- #include <string>
- #define MAX_SIZE 20
- using namespace std;
- template<class T> class Stack
- {
- private:
- T item[MAX_SIZE];
- int top;
- public:
- Stack()
- {
- top = -1;
- }
- void push(T data)
- {
- if(!this->is_full())
- item[++top] = data;
- else
- {
- cout << "Stack Error" << endl;
- exit(10);
- }
- }
- T pop()
- {
- if(!this->is_empty())
- {
- return item[top--];
- }
- else
- {
- cout << "Stack is Empty" << endl;
- exit(11);
- }
- }
- int size()
- {
- return top + 1;
- }
- bool is_empty()
- {
- if(top == -1)
- return true;
- else
- return false;
- }
- bool is_full()
- {
- if(top == MAX_SIZE - 1)
- return true;
- else
- return false;
- }
- void display()
- {
- for(int i = 0; i < this->size(); i++)
- {
- cout << item[i] << " ";
- }
- cout << endl;
- }
- T return_top()
- {
- return item[top];
- }
- };
- class Convert
- {
- private:
- bool num_flag;
- bool two_digit_flag;
- public:
- Convert();
- string return_with_bracket(string infix);
- void to_Postfix(string infix,char postfix[]);
- bool prcd(char op1, char op2);
- int isOperand(char op);
- int isOperator(char op);
- bool return_flag()
- {
- return num_flag;
- }
- };
- Convert::Convert()
- {
- this->num_flag = false;
- this->two_digit_flag = false;
- }
- string Convert::return_with_bracket(string infix)
- {
- return("(" + infix + ")");
- }
- bool Convert::prcd(char op1, char op2)
- {
- if((op1 == '+' || op1 == '-' || op1 == '*' || op1 == '/') && op2 == '(')
- return true;
- if(op1=='+' && op2=='+')
- return true;
- if(op1=='-' && op2=='-')
- return false;
- if(op1=='-' && op2=='+')
- return false;
- if(op1=='+' && op2=='-')
- return false;
- if(op1=='/' && op2=='/')
- return false;
- if(op1=='/' && (op2=='-' || op2=='+'))
- return true;
- if(op1=='*' && (op2=='+' || op2=='-'))
- return true;
- if((op1 == '-' || op1 == '+') && (op2 =='*' || op2 == '/'))
- return false;
- if((op1 == '$' || op1 == '+') && (op2 =='*' || op2 == '/' || op2=='-'))
- return true;
- if((op1 == '-' || op1 == '+' || op1 =='*' || op1 == '/')&& op2=='^')
- return false;
- if(op1 == '^' && ( op2 == '+' || op2 =='*' || op2 == '/' || op2=='-'))
- return false;
- }
- int Convert::isOperand(char op)
- {
- return(op >= '0' && op <= '9');
- }
- int Convert::isOperator(char op)
- {
- return(op =='+' || op =='-' || op == '/' || op =='*' || op =='^');
- }
- void Convert::to_Postfix(string infix, char postfix[])
- {
- int position, outpos=0;
- char c;
- int count = 0;
- char temp;
- char stacktop;
- Stack<char> stack;
- for(position = 0; (c = infix[position]) != '