们,请帮忙编一个表达式的运算代码(可以运算浮点数)多谢了明天要交

大虾们,请帮忙编一个表达式的运算代码(可以运算浮点数)谢谢了明天要交啊
谢谢大虾们啊!急啊...

------解决方案--------------------
C/C++ code

#include<iostream>
#include<cmath>
using namespace std;
const double PI=3.141592654;
const int SZ=1000;
int MKAC=0;
double STP=1;

template <class Type>
class STACK{
   private:
       Type base[SZ];
       int Size;
   public:
       
       STACK(){Size=0;};
       void push(Type a)  //入栈 
       {
           base[Size]=a;
           Size++;
       }
       Type pop()   //出栈
       {
           return base[--Size];
       }
       int size()
       {return Size;}
};

bool IsData(char ch)
{
    return ((ch>='0'&&ch<='9')||ch=='.')?true:false;
}

bool IsSym(char ch)
{
    return (ch=='+'||ch=='-'||ch=='*'||ch=='/')?true:false;
}

int IsPar(char ch)
{
    return ch=='\x28'?1:ch=='\x29'?-1:0;
}

int Priority(char ch) //符号的优先极别 
{
    switch(ch)
    {
    case '+':
        return 0;
    case '-':
        return 0;
    case '*':
        return 1;
    case '/':
        return 1;              
    default:
        return -1;                    
    }
}          
bool Check(char *ch)
{
    int a=0;
    for(int i=0;i<strlen(ch);i++)
        if(ch[i]=='.')
            a++;
        if(a>1)
            return false;
        return true;
}

double ToArc(double alpha){return (PI*alpha/180.0);}

double ToDgr(double arc){return (180*arc/PI);} 

double ToData(char* ch)
{
    int i,j,sumn=0;
    double sum=0.0;
    if(!Check(ch)) return 0.0;
    for(i=0;i<strlen(ch);i++)
    {if(ch[i]!='.')
    sumn=sumn*10+(ch[i]-'0');
    else break;
    }
    if(i<strlen(ch))
        for(j=i+1;j<strlen(ch);j++)
            sum=sum*10+(ch[j]-'0');
        sum/=pow(10.0,(double)(strlen(ch)-1-i)); 
        return (sum+sumn);
}

double Call(double sum,double data,char ch)//根据运算计算数据 
{
    double ans=0.0;
    switch(ch)
    { 
    case '+':
        ans=sum+data;         
        break;
    case '-':
        ans=sum-data;
        break;
    case '*':
        ans=sum*data;
        break;
    case '/':
        ans=sum/data;
        break;               
    default:ans=0.0;
        break;     
    }
    return ans;
}

int GetMatch(char* buffer,int pos)//找到匹配的括号 
{
    STACK<char> Temp;
    int i;
    for(i=pos;i<strlen(buffer);i++)
    {if(IsPar(buffer[i])==1)
    Temp.push('0');
    if(IsPar(buffer[i])==-1)
    {Temp.pop();
    if(Temp.size()==0) return i;
    }
    } 
    return -1;
}

int NL(int n)
{
    if(n==0)
        return 1;
    else return n*NL(n-1);
}

void Opr(STACK<char>& symbol,STACK<double>& data,int& mark)
{
    double sum;
    while(symbol.size()!=0)
    {char tem=symbol.pop();
    int temp=Priority(tem);
    symbol.push(tem);
    if(temp<mark)
        break;
    else{
        sum=Call(data.pop(),data.pop(),symbol.pop());
        data.push(sum);
    }
    }
}

double Calculate(char* buffer,double& sum)//主运算部分 
{
    STACK<double> data;
    STACK<char> symbol;
    double ans;
    char temp[SZ];
    int ct=0,mark=0,tp=0;
    data.push(sum);
    while(ct<=strlen(buffer))
    {
        if(IsData(buffer[ct]))
        {
            while(ct<strlen(buffer)&&IsData(buffer[ct]))
                temp[tp++]=buffer[ct++];
            temp[tp]='\0';
            tp=0;
            ans=ToData(temp);
            data.push(ans);      
            if(buffer[ct]=='!') {data.push(NL((int)data.pop()));ct++;}
            if(ct==strlen(buffer))
            {mark=0;
            Opr(symbol,data,mark);
            sum=data.pop();
            return sum;
            }
            else{
                int mark=Priority(buffer[ct]);
                Opr(symbol,data,mark);
            }
        }
        else if(IsSym(buffer[ct]))
            symbol.push(buffer[ct++]);
        else{
            char BF[100];int k=0;
            while(IsPar(buffer[ct])!=1&&ct<=strlen(buffer))
                BF[k++]=buffer[ct++];
            BF[k]='\0';      
            if(IsPar(buffer[ct])==1)
            {int i,j;
            char Temp[100];
            for(i=ct+1,j=0;i<GetMatch(buffer,ct);i++,j++)
                Temp[j]=buffer[i];
            Temp[j]='\0';
            data.push(Calculate(Temp,sum));
            
            ct+=(strlen(Temp)+1);
            if(ct+1==strlen(buffer))
            {mark=0;
            Opr(symbol,data,mark);
            sum=data.pop();
            return sum;
            }
            else{
                mark=Priority(buffer[ct+1]);
                Opr(symbol,data,mark);
            }
            ct++;
            }
        }
    } 
    return 0.;
}

int main()
{
    char buffer[SZ];
    double sum=0.0;
    cout.precision(12); 

    cout << "示例输入:(3.2+2.6)/2" << endl;
    cout << "示例输入:(3.2+2.6)*2" << endl;
    cout << "示例输入:(3.2-2)+3*(2.0+3.0)" << endl;
    cout << "字符中间不要加空格,按回车计算结果"<<endl;
    cout << "输入 q 或 quit 退出" <<endl;
    cout << "请输入表达式:" << endl;
    
    //输入
    do 
    { 
        cin>>buffer;
        if(strcmp(buffer,"q") == 0 || strcmp(buffer, "quit") == 0)
        {
            break;
        }
        cout<<Calculate(buffer,sum)<<endl;//计算和输出
    }while(1);
    return 0;
}