Cod sursa(job #2863498)

Utilizator Ana100Ana-Maria Tomoiala Ana100 Data 6 martie 2022 20:04:47
Problema Evaluarea unei expresii Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.15 kb
#include <fstream>
#include <stack>
#include<string>
using namespace std;
ifstream cin("evaluare.in");
ofstream cout("evaluare.out");
stack<int>nr;
stack<char>op;
string str;
int number(int &i)
{
    int formed_number=0;
    while(i<str.size() and str[i]>='0' and str[i]<='9')
    {
        formed_number=formed_number*10+str[i]-'0';
        i++;
    }
    i--;
    return formed_number;
}
int operation1(int val1, int val2, char op)
{
    if(op=='+')
        return val1+val2;
    else if(op=='-')
        return val1-val2;
    else if(op=='*')
        return val1*val2;
    else if(op=='/')
        return val1/val2;
}
int grad(char op)
{
    if(op=='+' or op=='-')
        return 1;
    else if(op=='*' or op=='/')
        return 2;
    return 0;
}
int main()
{
    getline(cin,str);
    for(int i=0;i<str.size();i++)
    {
        if(str[i]=='(')
        {
            op.push(str[i]);
        }
        else if(str[i]>='0' and str[i]<='9')
        {
            nr.push(number(i));
        }
        else if(str[i]==')')
        {
            while(op.size()>0 and op.top()!='(')
            {
                int val2=nr.top();
                nr.pop();
                int val1=nr.top();
                nr.pop();
                char operator1=op.top();
                op.pop();
                nr.push(operation1(val1,val2,operator1));
            }
            if(op.size()>0)
                op.pop();
        }
        else
        {
             while(op.size()>0 and grad(str[i])<=grad(op.top()))
             {
                 int val2=nr.top();
                 nr.pop();
                 int val1=nr.top();
                 nr.pop();
                 char operator1=op.top();
                 op.pop();
                 nr.push(operation1(val1,val2,operator1));
             }
             op.push(str[i]);
        }
    }
    while(op.size()>0)
    {
        int val2=nr.top();
        nr.pop();
        int val1=nr.top();
        nr.pop();
        char operator1=op.top();
        op.pop();
        nr.push(operation1(val1,val2,operator1));
    }
    cout<<nr.top();
    return 0;
}