Problem Description
Click here for SPOJ link: ONP
Transform the algebraic expression with brackets into RPN form (Reverse Polish Notation). Two-argument operators: +, -, *, /, ^ (priority from the lowest to the highest), brackets ( ). Operands: only letters: a,b,...,z. Assume that there is only one RPN form (no expressions like a*b*c).
Input
t [the number of expressions <= 100]
expression [length <= 400]
[other expressions]
Text grouped in [ ] does not appear in the input file
Output
The expressions in RPN form, one per line.
Sample Input/Output
Input:
3
(a+(b*c))
((a+b)*(z+x))
((a+t)*((b+(a+c))^(c+d)))
Output:
abc*+
ab+zx+*
at+bac++cd+^*
Time limit: 5s
Source limit: 50000B
Memory limit: 256MB
Solution description of Transform the Expression - ONP
The solution of this problem is implementation of postfix notation using a stack.
Solution of Transform the Expression(ONP)in C++
#include <iostream> #include <stack> #include <cctype> #include <cstring> using namespace std; int main () { int testCase; cin >> testCase; char input [410]; stack <char> s; while ( testCase-- ) { cin>>input; int length = strlen (input); for ( int i = 0; i < length; i++ ) { if ( isalpha (input [i]) ) cout << input [i]; else if ( input [i] == ')' ) { cout << s.top (); s.pop (); } else if ( input [i] != '(' ) s.push (input [i]); } cout << endl; } return 0; }
hey how did you took care of operator priority?
ReplyDelete