Ich habe hier einen einfachen Formelinterpreter für die 4 Grundrechenarten, ohne Klammerung und sonstige Extras, für den float-Wertebereich und max. 20 Operationen:
float formel(const char *s)
{
int n,i=0;
float f,l[41]={0};
char c[2];
if( sscanf(s,"%f%n",&f,&n) )
{
*l=f;
while( 2==sscanf(s+=n,"%1s%f%n",c,&f,&n) && strchr("+-*/",*c) )
{
l[++i]=*c;
l[++i]=f;
}
while(i)
{
int x=-1;
do if( (*c=l[x+=2])=='*'||*c=='/' ) break; while( x<i );
if(x<i)
l[x-1]=*c=='*'?l[x-1]*l[x+1]:l[x-1]/l[x+1];
else
*l=(*c=l[1]=='+')?*l+l[2]:*l-l[2],x=1;
memmove(&l[x],&l[x+2],(i-x+1)*sizeof*l);
i-=2;
}
}
return *l;
}