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