求 用逆波兰式 实现 简单的 计算器程序,输入一串四则运算式子,能给出结果解决办法

求 用逆波兰式 实现 简单的 计算器程序,输入一串四则运算式子,能给出结果
求   用逆波兰式   实现   简单的计算器程序,输入一串四则运算式子,能给出结果


如输入   5+8*(9+3),能给出结果


*如能在其中增加max   min   运算更好

如输入   5+8-max(2,3)+5*min(5,6),程序能给出结果

------解决方案--------------------
上次好像也有一个帖子叫加max,min的,可能也是你发的吧

这是我修改后的,没加什么注释,你自己看吧,注意,这样只能定义两个参数的函数
#include <iostream>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <sstream>
using namespace std;

typedef double (*pFUNC)(double,double);
//Functions
double _max(double a,double b)
{
return a> b?a:b;
}
double _min(double a,double b)
{
return a <b?a:b;
}
double _mul(double a,double b)
{
return a*b;
}
//如果还有其他函数,在这后面定义,然后在_func[fun_count]数组中加入映射关系,并且修改fun_count的值为函数的个数

struct FUNC {//定义一个结构,用来存储函数名和函数地址
FUNC(string n,pFUNC p):Name(n),pFunc(p){}
string Name;
pFUNC pFunc ;
};


const size_t fun_count=3;
FUNC _func[fun_count]= //定义一个数组,存储了多个函数名到函数地址的映射
{
FUNC( "max ",_max),
FUNC( "min ",_min),
FUNC( "mul ",_mul)
};

enum types { DELIMITER = 1, VARIABLE, NUMBER,FUNCTION};//定义枚举类型把DELIMITER初试化为1后面的相应的是前面值+1

class Info{
public:
void displayInfo();
};

class parser {
char *exp_ptr; // 定义一个指向表达式的指针
char token[80]; // 存储表达式中的字符变量
char tok_type; // 存储具体是什么类型

void eval_exp2(double &result);
void eval_exp3(double &result);
void eval_exp4(double &result);
void eval_exp5(double &result);
void eval_exp6(double &result);
void atom(double &result);
void get_token();
double get_function_val();
void serror(int error);
int isdelim(char c);
public:
parser();//类的构照函数
double eval_exp(char *exp);
};

void Info::displayInfo(){
cout < < "==============================================================\n ";
cout < < "====================这是一个计算器程序========================\n ";
cout < < "==============================================================\n ";
cout < < "* 说明:可以进行+ - * \ % ^ 操作您还可以用括号输入您的表达式 *\n ";
cout < < "* 您输入表达式不需要输=号 例:您可输入(6+7)*5\\7+4 然后回车 *\n ";
cout < < "==============================================================\n\n ";
cout < < "\t\t输入点号(.)回车,结束程序运行\n\n ";
}

// 类构造函数的具体实现
parser::parser()
{
exp_ptr = NULL;//把exp_ptr的指针初始化为空
}

// 方法eval_exp的具体实现过程
double parser::eval_exp(char *exp)
{
double result;

exp_ptr = exp;//把传递过来的参数exp负给exp_ptr

get_token();
if(!*token) {
serror(2); //输出没有任何表达式的错误信息
return 0.0;
}
eval_exp2(result);
if(*token) serror(0); // last token must be null
return result;
}

// 两个变量字符是加或者减操作
void parser::eval_exp2(double &result)
{
register char op;
double temp;

eval_exp3(result);
while((op = *token) == '+ ' || op == '- ') {
get_token();
eval_exp3(temp);
switch(op) {
case '- ':
result = result - temp;
break;
case '+ ':
result = result + temp;
break;
}
}
}

// 两个变量是乘或者除操作 或者是取余
void parser::eval_exp3(double &result)