| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1419 人关注过本帖
标题:[求助]用栈实现带括号的四则运算
只看楼主 加入收藏
lolita
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-7-5
收藏
 问题点数:0 回复次数:3 
[求助]用栈实现带括号的四则运算
在网上找了好多版本的,哪位GGJJ能给我个相对简单些的.急用啊.小妹这边先谢谢拉.今晚通宵看书了.要交程序设计...

最好是用栈实现的.不过不用的话也无所谓拉

[此贴子已经被作者于2006-7-5 22:45:37编辑过]

搜索更多相关主题的帖子: 括号 运算 GGJJ 程序设计 
2006-07-05 22:31
lolita
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-7-5
收藏
得分:0 

这个是一个朋友写的,好多错误啊,有没有高手帮我改一下,小女子感激不尽


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
char s1[100],s2[100];
gets(s1);
change(s1,s2);
compute(s2);
printf("the result is%c",s2);
}


void change(char*s1,char*s2)
{struct Stacksq R;
int i=0,j=0;
char ch;
InitStack2(&R,5);
Push(&R,'@');
ch=s1[i];
while(ch!='\0')
{
if(ch==' ') ch=s1[++i];
else if(ch=='(') {Push(&R,ch); ch=s1[++i];}
else if(ch==')') {while(Peek(&R)!='(') s2[j++]=Pop(&R); Pop(&R); ch=s1[++i];}
else if(ch=='+'||ch=='-'||ch=='*'||ch=='/')
{char w=Peek(&R);
while(Precedence(w)>=Precedence(ch))
{s2[j++]=w; Pop(&R); w=Peek(&R);}
Push(&R,ch);
ch=s1[++i];
}
else { if((ch<'0'||ch>'9')&&ch!='.')
{printf("this sentence is false!\n"); exit(1);}
while((ch>='0'&&ch<='9')||ch=='.')
{s2[j++]=ch; ch=s1[++i];}
s2[j++]=' ';
}
}
ch=Pop(&R);
while(ch!='@')
{ if(ch=='(')
{printf("表达式错误!\n"); exit(1);}
else {s2[j++]=ch; ch=Pop(&R);}
}
s2[j++]='\0';
}


int Precedence(char op)
{ switch(op)
{ case'+':
case'-':
return 1 ;
case'*':
case'/':
return 2 ;
case'(':
case'@':
return 0 ;
}
}

double compute(char*s2)
{
struct Stacksq s;
double x,y;
int i=0;
InitStack2(&s,5);
while(str[i])
{ if(str[i]==' ')
{i++; continue;}
switch(str[i])
{ case'+':
x=Pop(&s)+Pop(&s);
i++; break;
case'-':
x=Pop(&s);
x=Pop(&s)-x;
i++; break;
case'*':
x=Pop(&s)*Pop(&s);
i++; break;
case'/':
x=Pop(&s);
if(x!=0.0) x=Pop(&s)/x;
else{printf("除数为0!\n"); exit(1);}
i++; break;
default:
x=0;
while(str[i]>=48&&str[i]<=57)
{x=x*10+str[i]-48; i++;}
if(str[i]=='.')
{double j=10.0; i++; y=0;
while(str[i]>=48&&str[i]<=57)
{y=y+(str[i]-48)/j; i++; j*=10;}
x+=y;
}
Push(&s,x);
}
if(EmptyStack(&s))
{printf("后缀表达式错!\n"); exit(1);}
x=Pop(&s);
if(EmptyStack(&s)) return x;
else{printf("后缀表达式错!\n"); exit(1);}
}

2006-07-06 22:35
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 

c++/C + 汇编 = 天下无敌
2006-07-07 13:17
Zacard
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-7-7
收藏
得分:0 
main前面没有声明

自由指针是一种生活态度
2006-07-07 18:47
快速回复:[求助]用栈实现带括号的四则运算
数据加载中...
 
   



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

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