Cod sursa(job #594362)

Utilizator elffikkVasile Ermicioi elffikk Data 7 iunie 2011 13:33:04
Problema Evaluarea unei expresii Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <sstream>
#include <fstream>

using namespace std;

int val(string s)
{
    int n;
    istringstream(s) >> n;
    return n;
}

int eval(string s)
{
    int p1,p2,p3,p4,pp=0;
    p1=p2=p3=p4=-1;
    for(int i=0; i<s.length();i++)
    {
        if (s[i]=='(') pp++;
        else if (s[i]==')') pp--;
        else if (pp==0)
        {
            if (s[i]=='+') p1=i;
            else if (s[i]=='-') p2=i;
            else if (s[i]=='*') p3=i;
            else if (s[i]=='/') p4=i;
        }
    }
    if (p1>p2) return eval(s.substr(0,p1)) + eval(s.substr(p1+1,s.length()-p1));
    else if (p2>0) return eval(s.substr(0,p2)) - eval(s.substr(p2+1,s.length()-p2));
    if (p3>p4) return eval(s.substr(0,p3)) * eval(s.substr(p3+1,s.length()-p3));
    if (p4>0) return eval(s.substr(0,p4)) / eval(s.substr(p4+1,s.length()-p4));
    if (pp==0 && s[0]=='(') return eval(s.substr(1,s.length()-2));
    else return val(s);
}

int main()
{
    ifstream input("evaluare.in");
    ofstream output("evaluare.out");
    string s;
    input >> s;

    int r = eval(s);
    output << r;
    //cout << r;

    return 0;
}