Cod sursa(job #290242)
#include<fstream.h>
#include<stdlib.h>
#include<string.h>
char s[100005],sir[100005],st[100100];
int v[100005],n,m,p,k,i;
int main()
{
ifstream f("evaluare.in");
f>>s;
n=strlen(s);
i=0;
p=0;
st[p]='=';
s[n]='=';
s[n+1]=0;
k=-1;
while (i<n)
{
if ((s[i]-'0'>=0) && (s[i]-'0'<=9) && (i<n))
{
while ((s[i]-'0'>=0) && (s[i]-'0'<=9) && (i<n))
sir[++k]=s[i++];
sir[++k]='|';
}
if (s[i]=='(')
st[++p]=s[i++];
if (s[i]==')')
{
while (st[p]!='(')
sir[++k]=st[p--];
p--;
i++;
}
if (s[i]=='+' || s[i]=='-')
{
while (st[p]=='+' || st[p]=='-' || st[p]=='*' || st[p]=='/')
sir[++k]=st[p--];
st[++p]=s[i++];
}
if (s[i]=='*' || s[i]=='/')
{
while (st[p]=='*' || st[p]=='/')
sir[++k]=st[p--];
st[++p]=s[i++];
}
if (s[i]=='=')
while (p>0)
sir[++k]=st[p--];
}
m=-1;
i=0;
n=-1;
while (i<=k)
{
if ((sir[i]-'0'>=0) && (sir[i]-'0'<=9))
{
while((sir[i]-'0'>=0) && (sir[i]-'0'<=9))
s[++n]=sir[i++];
s[n+1]=0;
v[++m]=atoi(s);
n=-1;
}
if (sir[i]=='+') { v[--m]=v[m]+v[m+1]; i++; }
if (sir[i]=='-') {
v[--m]=v[m]-v[m+1];
i++;
}
if (sir[i]=='*') { v[--m]=v[m]*v[m+1]; i++; }
if (sir[i]=='/') { v[--m]=v[m]/v[m+1]; i++; }
if (sir[i]=='|') i++;
}
ofstream g("evaluare.out");
g<<v[m];
f.close();
g.close();
return 0;
}