如何解析算术表达式,计算出结果,有写好的库吗
项目中想解析算述表达式,并求出值,找好久也没找到这样的库,不知道有没有这样的类库!请指点
[解决办法]
void Convert(char *Formula){
Stack <char> FormulaString;
Stack <long double> FormulaNumeral;
bool Flag=1;
int k=0,j=0;
char c,c1,str[50];
while((c=Formula[j++]) != '= '){
if((c> = '0 '&&c <= '9 ')||c== '. ') {str[k]=c;k++;}
else{
if(k> 0){str[k]= '\0 '; FormulaNumeral.Push(atof(str));k=0; }
switch(c){
case '( ':
FormulaString.Push(c);
break;
case 's ':case 'c ':case 't ':
j+=3;
FormulaString.Push(c);
break;
case '+ ':case '- ':
while(! FormulaString.IsEmpty()){
c1=FormulaString.Pull();
if(c1!= '( ') FormulaNumeral.Push(jisuan(c1,FormulaNumeral.Pull(),FormulaNumeral.Pull()));
else {FormulaString.Push(c1);FormulaString.Push(c);break;}
}
break;
case '* ':case '/ ':case '^ ':
while(! FormulaString.IsEmpty()){
c1=FormulaString.Pull();
if(c1== '* '||c1== '/ '||c1== '^ ') FormulaNumeral.Push(jisuan(c1,FormulaNumeral.Pull(),FormulaNumeral.Pull()));
else{ FormulaString.Push(c1);FormulaString.Push(c);break;}
}
break;
case ') ':
while(! FormulaString.IsEmpty()){
c1=FormulaString.Pull();
if(c1!= '( '){
if(!((c1> =42&&c1 <=47)||c1== '^ ')){ FormulaNumeral.Push(jisuan(c1,FormulaNumeral.Pull()));break;}
else{
FormulaNumeral.Push(jisuan(c1,FormulaNumeral.Pull(),FormulaNumeral.Pull()));
c1=FormulaString.Pull();
if((c1> =42&&c1 <=47)||c1== '^ ') FormulaNumeral.Push(jisuan(c1,FormulaNumeral.Pull(),FormulaNumeral.Pull()));
else break;
}
}
}
break;
}
}
}
FormulaNumeral.PrintStack();
}