Untitled

mail@pastecode.io avatar
unknown
c_cpp
2 years ago
2.1 kB
6
Indexable
Never
#include <iostream>
#include <stack>
#include <string>
#include <queue>
#include <iomanip>
using namespace std;

string topostfix(string myString);
void steps_postfix(string myString);
int precedence(char op);

int main(){	
	
	cout << "Postfix" << endl;
	cout << "Expression \t\t Operator \t\t Operand" << endl;
	
	//cout << topostfix("x((a+b)*(c+d))");
	cout << topostfix("a+b*c+d");
	//cout << topostfix("a*b*c+d*e*f+g");

	return 0;
}

string topostfix(string myString){
	char myChar[myString.length()];
	strcpy(myChar, myString.c_str());
	
	stack<char> s_op;
	stack<char> temp;
	
	string result = "";
	
	for(int i = 0; i < myString.length(); i++){
		
		if(myChar[i] != '*' && myChar[i] != '+' && myChar[i] != '-' && myChar[i] != '/' && myChar[i] != '(' && myChar[i] != ')'){	//	if operand
			result += myChar[i];
			
			cout << myChar[i]; // for step-by-step output

//			// output!!!!
//			if(s_op.empty()){
//				cout << setw(21) << " " << setw(18) << result << endl;
//			}
//			else{
//				while(!s_op.empty()){
//					cout << setw(21) << s_op.top() << setw(18) << result << endl;
//					temp.push(s_op.top());
//					s_op.pop();
//				}
//				while(!temp.empty()){
//					s_op.push(temp.top());
//					temp.pop();
//				}
//			}
//
		}
		else if (myChar[i] == '(') {
				s_op.push(myChar[i]);
		}
		else if(myChar[i] == ')'){
				while(s_op.top() != '('){
					result += s_op.top();
					s_op.pop();
				}
			s_op.pop();	// pop the opening parenthesis
		}
			
		else{	// if char is an operator
			while(!s_op.empty() && precedence(s_op.top()) >= precedence(myChar[i])){
				result += s_op.top();
				s_op.pop();
			}
			cout << myChar[i];	// step-by-step output

			s_op.push(myChar[i]);

			//temp.push((s_op.top()));
			

			
		}
		
		
		// print on all lines area
	

		//cout << setw(18) << "hi" << endl;
		cout << setw(39) << result << endl;
	}
	
	while(!s_op.empty()){
		result += s_op.top();
		s_op.pop();
	}
	
	cout << setw(33) << "Output: " ;
	return result;
}

int precedence (char op){
	if(op == '*') return 4;
	else if (op == '/') return 3;
	else if(op == '+') return 2;
	else if(op == '-') return 1;
	return 0;
}