Cod sursa(job #2298966)

Utilizator iarinatudorTudor Iarina Maria iarinatudor Data 8 decembrie 2018 18:15:20
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.78 kb
#include <iostream>
#include <fstream>
#include <stack>
#include <ctype.h>
#include <cstring>

using namespace std;
int n,k=0;
ifstream fin("evaluare.in");
ofstream fout("evaluare.out");
char s[100020],v[100020];
stack <char> semn;
stack <int> S1;
void citire()
{
    fin>>s;
    n=strlen(s);
}
void afish()
{
    cout<<v;
}
int priority(char c)
{
    if(c=='(') return 1;
    if(c==')') return -1;
    if(c=='+'||c=='-') return 2;
    return 3;
}
void rezolva()
{
    int x=S1.top();
    S1.pop();
    int y=S1.top();
    S1.pop();
    char c=semn.top();
    int rasp;
    if(c=='-') rasp=y-x;
    if(c=='+') rasp=x+y;
    if(c=='/') rasp=y/x;
    if(c=='*') rasp=x*y;
    S1.push(rasp);

}

void rez()
{
    for(int i=0; i<n; i++)
    {   int nr=0;
        if(isalnum(s[i])){while(isalnum(s[i])) {v[k++]=s[i]; nr=nr*10+s[i]-'0'; i++;} S1.push(nr); i--;}

        else
        {
            int p=priority(s[i]);
            if(p==1) semn.push('(');
            else if(p==-1)
            {
                while(semn.top()!='(')
                {
                    v[k++]=semn.top();
                    rezolva();
                    semn.pop();
                }
                semn.pop();

            }
            else
            {
                while(!semn.empty()&&priority(semn.top())>=p&&priority(semn.top())>1)
                {
                    v[k++]=semn.top();
                    rezolva();
                    semn.pop();
                }
                semn.push(s[i]);
            }
        }

    }
    while(!semn.empty())
    {
          v[k++]=semn.top();
          rezolva();
            semn.pop();
    }
}
int main()
{
    citire();
    rez();
   // afish();
    fout<<S1.top();
    return 0;
}