Pagini recente » Cod sursa (job #2990522) | Cod sursa (job #1358039) | Cod sursa (job #1395115) | Cod sursa (job #1916861) | Cod sursa (job #2900938)
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
#define MAX 100010
using namespace std;
string NUM("1234567890");
vector<string> parse (string s){
vector<string> toks;
string curr_number;
for(auto c:s){
if(NUM.find(c) != -1){
curr_number.push_back(c);
}
else{
if(!curr_number.empty()){
toks.push_back(curr_number);
curr_number = "";
}
toks.push_back(string(1, c));
}
}
if(!curr_number.empty()){
toks.push_back(curr_number);
curr_number = "";
}
return toks;
}
int where, len;
vector<string> toks;
int factor();
int term();
int eval(){
int t = term();
string op = toks[where];
if(op == "+"){
++where;
t = t + eval();
}
else if(op == "-"){
++where;
t = t - eval();
}
else{
}
return t;
}
int term(){
int f = factor();
int ans;
string op = toks[where];
if(op == "*"){
++where;
ans = f * term();
}
else if(op == "/"){
++where;
ans = f / term();
}
else{
ans = f;
}
return ans;
}
int factor(){
int a;
if(toks[where] == "("){
++where;
a = eval();
++where;
}
else{
a = stoi(toks[where]);
++where;
}
return a;
}
int main(){
ifstream fin;
ofstream fout;
fin.open("evaluare.in");
fout.open("evaluare.out");
string s;
getline(fin, s);
//cout << s << endl;
toks = parse(s);
toks.push_back(")");
fout << eval();
}