Pagini recente » Cod sursa (job #1776616) | Cod sursa (job #2649157) | Cod sursa (job #732870) | Cod sursa (job #1363667) | Cod sursa (job #1974415)
#include <iostream>
#include <fstream>
#include <cstring>
#include <stack>
using namespace std;
ifstream in("evaluare.in");
ofstream out("evaluare.out");
#define ll long long
const int strMax = 1e5 + 5;
const int maxLvl = 2;
int N;
char str[strMax], *p = str;
const char lvlOp[3][3] = {'+','-','\0','*','/','\0'};
int eval(int);
int compute(int,int,char);
int main() {
in>>str;
str[strlen(str)] = 'd';
/*
const char s[4] = "012";
cout<<s[2]<<'\n';
cout<<s+1<<'\n';
//s[1] = 'c';
char *ptr = (char*)s;
ptr[1] = 'c';
cout<<s<<'\n';
//*/
cout<<lvlOp[0]<<'\n';
cout<<lvlOp[1]<<'\n';
char test = '-';
if (strchr(lvlOp[1],test) == nullptr)
cout<<"da"<<'\n';
out<<eval(0)<<'\n';
in.close();out.close();
return 0;
}
int eval(int lvl) {
int ans;
if (lvl == maxLvl) {
if (*p == '(') {
++p;
ans = eval(0);
++p;
}
else {
ans = 0;
while ('0' <= *p && *p <= '9') {
ans = ans * 10 + (*p - '0');
++p;
}
}
}
else {
for (ans = eval(lvl+1); strchr(lvlOp[lvl],*p);) {
ans = compute(ans,eval(lvl+1),*p++);
}
}
return ans;
}
int compute(int x,int y,char op) {
switch(op) {
case '+': return x+y;
case '-': return x-y;
case '*': return x*y;
case '/': return x/y;
}
}