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

xiaoxin369 2007-07-31 07:47:18
求 用逆波兰式 实现 简单的计算器程序,输入一串四则运算式子,能给出结果


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



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

如输入 5+8-max(2,3)+5*min(5,6),程序能给出结果
...全文
679 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
victorinsky 2007-08-02
  • 打赏
  • 举报
回复
逆波兰式的问题楼上已经说的很清除了,再给个另外的思路吧
也可以用递归来求算式的值
int f(char* s,int b,int e)
{
if(s[b]=='('&&s[e]==')'&&匹配)
return f(s,b+1,e-1);
else
{
找到优先级别最低的操作符@,以及它的位置m
return f(s,b,m-1) @ f(s,m+1,e);
}
这样也能计算出以中序给出的算式的结果
至于你说的min max,直接些两个函数就可以了
todototry 2007-08-01
  • 打赏
  • 举报
回复
原理便是这样
lz加油
即可以,okokok
todototry 2007-08-01
  • 打赏
  • 举报
回复
使用两个栈
一个运算对象的栈
一个运算符的栈
todototry 2007-08-01
  • 打赏
  • 举报
回复
看看编译原理,编译技术,算式处理方面
DraculaW 2007-08-01
  • 打赏
  • 举报
回复
嗯 作业题么

肯定没好好学 这个这么简单

嗯 楼主 在你身上我看到了当年的我 后悔中
MPTD_Fire 2007-07-31
  • 打赏
  • 举报
回复
void NiBoLan(char *str,char *new)//把中缀表达式str转换成逆波兰式new
{
p=str;q=new; //为方便起见,设str的两端都加上了优先级最低的特殊符号
InitStack(s); //s为运算符栈
while(*p)
{
if(*p是字母)) *q++=*p; //直接输出
else
{
c=gettop(s);
if(*p优先级比c高) push(s,*p);
else
{
while(gettop(s)优先级不比*p低)
{
pop(s,c);*(q++)=c;
}//while
push(s,*p); //运算符在栈内遵循越往栈顶优先级越高的原则
}//else
}//else
p++;
}//while
}//
MPTD_Fire 2007-07-31
  • 打赏
  • 举报
回复
int GetValue_NiBoLan(char *str)//对逆波兰式求值
{
p=str;InitStack(s); //s为操作数栈
while(*p)
{
if(*p是数) push(s,*p);
else
{
pop(s,a);pop(s,b);
r=compute(b,*p,a); //假设compute为执行双目运算的过程
push(s,r);
}//else
p++;
}//while
pop(s,r);return r;
}//GetValue_NiBoLan

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧