Cod sursa(job #680841)

Utilizator michael9ufoStanescu Mihai michael9ufo Data 15 februarie 2012 23:30:19
Problema Evaluarea unei expresii Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.74 kb
/*
    w/o ( support . for tests
*/

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <stdlib.h>
#include <string.h>

using namespace std;

int main()
{

        string expr;

        unsigned long rezultat = 0;

        freopen("evaluare.in", "r", stdin);

        while(!feof(stdin))
            expr.push_back(fgetc(stdin));

        fclose(stdin);

        string::iterator it;

        int num, num2;

        char len[32], len2[32];

        char op = '+';

        size_t sl, s2;

        for(it=expr.begin();it<expr.end();++it)
            if(*it >= '0' || *it <= '9')
            {
                num = atoi(&*it);

                sprintf(len, "%d", num);

                sl = strlen(len);

                if((it + sl) < expr.end())
                    it += sl;

                if(strchr("*/", *it))
                {

                    if(*it == '*')
                    {

                        num2 = atoi(&*(it + 1));

                        sprintf(len2, "%d", num2);

                        s2 = strlen(len2);

                        if(op == '+')
                            rezultat += (num * num2);
                        else if(op == '-')
                            rezultat -= (num * num2);
                        else if(op == '/')
                            rezultat /= (num * num2);
                        else if(op == '*')
                            rezultat *= (num * num2);

                       if((it + 1 + s2) < expr.end())
                            it += s2 + 1;

                    }
                    else if(*it == '/')
                    {

                        num2 = atoi(&*(it + 1));

                        sprintf(len2, "%d", num2);

                        s2 = strlen(len2);

                        if(op == '+')
                            rezultat += (num / num2);
                        else if(op == '-')
                            rezultat -= (num / num2);
                        else if(op == '/')
                            rezultat /= (num / num2);
                        else if(op == '*')
                            rezultat *= (num / num2);

                       if((it + 1 + s2) < expr.end())
                            it += s2 + 1;

                    }

                }
                else if(op == '+')
                    rezultat += num;
                else if(op == '-')
                    rezultat -= num;

                op = *it;

            }
            else if(strchr("+*-/", *it))
                op = *it;

    expr.clear();

    freopen("evaluare.out", "w", stdout);

    cout<<rezultat<<"\n";

    fclose(stdout);

    return 0;
}