Cod sursa(job #2049190)

Utilizator luanastLuana Strimbeanu luanast Data 26 octombrie 2017 22:21:59
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.84 kb
#include <fstream>
#include <stack>
using namespace std;
ifstream fin ("evaluare.in");
ofstream fout ("evaluare.out");
char expresie[100001];
stack <char> stivasemn[100001];
stack <char> stivaeval[100001];
int i,nr;
int main(){
    fin>>expresie;
    for(i=1;expresie[i]!=0;i++){
        if(expresie[i]>='0' && expresie[i]<='9'){
            while(expresie[i]>='0' && expresie[i]<='9'){
                nr=nr*10+expresie[i]-'0';
                ++i;
            }
            //--i;
            stivaeval.push(nr);
            continue;
        }
        if(expresie[i]=='*' || expresie[i]=='/'){
            while(!stivasemn.empty() && (stivasemn.top()=='*' || stivasemn.top()=='/')){
                stivaeval.push(stivasemn.top());
                stivasemn.pop();
            }
        }
        if(expresie[i]=='+' || expresie[i]=='-'){
            while(!stivasemn.empty() && stivasemn.top()!='('){
                stivaeval.push(stivasemn.top());
                stiva.pop();
            }
        }
        if(expresie[i]==')'){
            while(!stivasemn.empty()){
                stivaeval.push(stivasemn.top());
                stiva.pop();
            }
        }
        stivasemn.push(expresie[i]);
    }
    while(!stivaeval.empty()){
        if(stivaeval.top()=='+' || stivaeval.top()=='-' || stivaeval.top()=='*' || stivaeval.top()=='/'){
            semn=stivaeval.top();
            stivaeval.pop();
            b=stivaeval.top();
            stivaeval.pop();
            a=stivaeval.top();
            stivaeval.pop;
            if(semn=='+')
                stivaeval.push(a+b);
            if(semn=='-')
                stivaeval.push(a-b);
            if(semn=='*')
                stivaeval.push(a*b);
            if(semn=='/')
                stivaeval.push(a/b);
        }
    }
    return 0;
}