标题:算术表达式用栈实现问题求助
只看楼主
许三多
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-11-7
 问题点数:0 回复次数:4 
算术表达式用栈实现问题求助

#include<iostream>
using namespace std;
void main()
{
const int n0=30;
int s1[n0+1]; //数栈
char s2[n0+1]; //符栈
for(int i=0;i<5;i++)
cin>>s1[i];
cin>>s2;
int t1,t2;
void calcu() //计算
{
int x1,x2,x; //x1与x2运算=x
char p; //定义弹出的运算符
p=s2[t2--]; //弹出1个运算符
x2=s1[t1--];
x1=s1[t1--]; //弹出两个数
switch(p){
case'+':x=x1+x2;break;
case'-':x=x1-x2;break;
case'*':x=x1*x2;break;
case'/':x=x1/x2;
}
}s1[++t1]; //结果压入数栈
void calculator()
{
char c;int v;
t1=t2=0; //设置空栈
cin>>c; //读一个字符

while(c!=';')
switch(c)
{
case'+':case'-';
while(t2&&(s2[t2]!='('))
calcu();
s2[++t2]=c;
cin>>c;break;
case'*':case'/';
if(t2&&((s2[t2]=='*')||(s2[t2]=='/'))
calcu(); //执行先遇到的乘除
s2[++t2]=c; //当前运算符进栈

cin>>c;break; //读下一个字符
case'('
s2[++t2]=c; //左括号进栈
cin>>c; //读下一个字符
break;
case')';
while(s2[t2]!='(')
calcu(); //计算()内的数
t2--;
cin>>c;
break;
default:
v=0;
do{
v=10*v+c-'0';
cin>>c;
}
while((c>='0')&&(c<='9'));
s1[++t1]=v;
};
while(t2) calcu(); //执行先遇到的+-*/
cout<<s1[t1]; //输出执行出的结果
}
}





搜索更多相关主题的帖子: 算术 int 表达 std 
2007-11-14 13:57
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
得分:0 

用栈做好做点!

依次读入表达式

两个栈`` 一个` 保存运算数字`` 一个保存运算符``

在比软运算符的优先级`` 低就进
高就出栈运算数 进行运算

2007-11-14 17:06
柒兲
Rank: 1
等 级:新手上路
威 望:1
帖 子:126
专家分:0
注 册:2007-9-26
得分:0 

有很多贴子` 我原来也问过这个问题`

你可以搜索一下

2007-11-14 17:07
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 
函数里面在定义函数,
写好格式再看吧,我晕了,20个错误...

倚天照海花无数,流水高山心自知。
2007-11-14 20:53
许三多
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-11-7
得分:0 
斑竹
那关键是主函数怎么实现这个算法我不会```
这个算法应该没有问题
我是照书上打的哦`
我就是不会怎么传值进去实现
哪位大哥 能帮帮哦 把原代码发给我看看呀
我查了半天 论坛好象没有这样的题目
谢谢帮主了```

死了都要C++
2007-11-15 11:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-185862-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015777 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved