Pagini recente » Cod sursa (job #2333212) | Cod sursa (job #1370910) | Cod sursa (job #935312) | Cod sursa (job #803671) | Cod sursa (job #1810452)
#include <fstream>
#include <stack>
#include <string.h>
using namespace std;
int meret, i = 0,p = 0;
char s[1000000],q[1000000];
string ss;
stack <int> verem;
bool isoperator(char x)
{
return (x == '+' or x == '-' or x == '*' or x == '/') ? 1:0;
}
int priority(char x)
{
if(x == '+' or x == '-')
return 1;
if(x == '*' or x == '/')
return 2;
return 0;
}
int main()
{
verem.push(0);
ifstream be("evaluare.in");
ofstream cout("evaluare.out");
be>>ss;
meret = ss.size();
//cout<<meret;
strcpy(s,ss.c_str());
while(i < meret)
{
//cout<<i<<endl;
while(s[i] == ' ')
{
i++;
}
if( isdigit(s[i]) )
{
while( isdigit(s[i]) )
{
q[p] = s[i];
i++;
p++;
}
q[p] = ' ';
p++;
}
if( isoperator(s[i]) )
{
char n = verem.top();
verem.pop();
while(priority(n) >= priority(s[i]))
{
q[p] = n;
p++;
q[p] = ' ';
p++;
n = verem.top();
verem.pop();
}
verem.push(n);
verem.push(s[i]);
i++;
}
if(s[i] == '(')
{
verem.push('(');
i++;
}
if(s[i] == ')')
{
int n = verem.top();
verem.pop();
while(n != '(')
{
q[p] = n;
p++;
q[p] = ' ';
p++;
n = verem.top();
verem.pop();
}
i++;
}
}
while(!verem.empty())
{
q[p] = verem.top();
verem.pop();
p++;
q[p] = ' ';
p++;
}
//cout<<"\n"<<q<<endl;
i = 0;
p = p - 2;
while(i < p - 1)
{
while(q[i] == ' ')
{
i++;
}
if( isdigit(q[i]) )
{
int n = 0;
while( isdigit(q[i]))
{
n = n * 10 + q[i] - 48;
i++;
}
verem.push(n);
}
if( isoperator(q[i]))
{
int n1,n2;
n1 = verem.top();verem.pop();
n2 = verem.top();verem.pop();
switch (q[i])
{
case '+': verem.push(n2 + n1);break;
case '-': verem.push(n2 - n1);break;
case '*': verem.push(n2 * n1);break;
case '/': verem.push(n2 / n1);break;
}
i++;
}
//cout<<verem.top()<<endl;
}
cout<<verem.top();
return 0;
}