Pages

Sunday, November 10, 2013

SPOJ: Transform the Expression -- ONP

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;
}

1 comment: