社区
Java SE
帖子详情
@@@@@@@@@@@恳请哪位达人给帮个忙
Buffered
2006-12-20 09:37:30
小弟正做编译原理的课程设计(快到期了)遇到这么个问题:
现有字符串表达式如:a+b*c-d,放在数组char aa[]中,另有两个数组分别存放a,b,c,d
及其对应的值,abcd和其值存放的位置相同,
char bb[] 中分别存放a,b,c,d
int cc[]中放的是值1,2,3,4
(即a的值是1,b的值是2,c的值是3,d的值是4)
请问如何得到表达式的值,(给出算法思路也好啊!)
多谢了!!!!
...全文
97
3
打赏
收藏
@@@@@@@@@@@恳请哪位达人给帮个忙
小弟正做编译原理的课程设计(快到期了)遇到这么个问题: 现有字符串表达式如:a+b*c-d,放在数组char aa[]中,另有两个数组分别存放a,b,c,d 及其对应的值,abcd和其值存放的位置相同, char bb[] 中分别存放a,b,c,d int cc[]中放的是值1,2,3,4 (即a的值是1,b的值是2,c的值是3,d的值是4) 请问如何得到表达式的值,(给出算法思路也好啊!) 多谢了!!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Buffered
2006-12-21
打赏
举报
回复
不过c中的指针问题 ,在java中是很麻烦
Buffered
2006-12-21
打赏
举报
回复
xie le !!
healer_kx
2006-12-20
打赏
举报
回复
给你一个C程序,很容易改成Java的了。
#include<stdio.h>
#define STACKINCREMENT 10
#define stacksize 100
#define OK 1
#define ERROR 0
#define Status char
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}Sqtack;
Status precede(GetTop(OPTR),c)
{
if(GetTop(OPTR)=='+'||GetTop(OPTR)=='-')
if(c=='+'||c=='-'||c==')'||c=='#')
return('>');
else
return('<');
if(GetTop(OPTR)=='*'||GetTop(OPTR)=='/')
if(c=='(')
return('<');
else
return('>');
if(GetTop(OPTR)=='(')
if(c==')')
return('=');
if(c=='#')
return(' ');
else
return('<');
if(GetTop(OPTR)==')')
if(c=='(')
return(' ');
else
return('>');
if(GetTop(OPTR)=='#')
if(c=='#')
return('=');
if(c==')')
return( );
else
return('<');
}
Status In(c,OP)
{
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='('||c==')'||c=='#')
return(1);
else
return(0);
}
Status Operate(a,theta,b)
{
status sum,m,n;
m=*a,n=*b;
if(theta=='*')
sum=m*n;
if(theta=='/')
sum=m/n;
if(theta=='+')
sum=m+n;
if(theta=='-')
sum=m-n;
return(sum);
}
OperandType EvaluateExpression()
{
Status a,b,c;
InitStack(OPTR);
push(OPTR,'#' );
Initstack(OPND);
c=getchar();
while(c!='#'||Gettop(OPTR)!='#')
{
if(!In(c,OP)){Push(OPND,c);c=getchar();}
else
swtich(precede(Gettop(OPTR),c))
{case'<':Push(OPTR,c);c=getchar;break;
case'=':Pop(OPTR,x);c=getchar();break;
case'>':Pop(OPTR,theta);Pop(OPND,b);pop(OPND,a);Push(OPND,operate(a,theta,b));break;
}
}
return GetTop(OPND);
}
Status InitStack(SqStack *OPTR)
{
OPTR->base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType ));
if(!OPTR->base) exit (OVERFLOW);
OPTR->top=OPTR->base;
OPTR->stacksize=STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack *OPTR,SElemType e)
{
if(OPTR->top-OPTR->base>=OPTR->stacksize)
{
OPTR->base=(SElemType *)realloc(OPTR->base,(OPTR->stacksize+STACKINCREMENT)*sizeof(SElemType ));
if(!OPTR->base) exit (OVERFLOW);
OPTR->top=OPTR->base+OPTR->stacksize;
OPTR->stacksize+=STACKINCREMENT;
}
*(OPTR->top)=e;OPTR->top++;
return OK;
}
Status GetTop(SqStack OPTR,SElemType *p)
{
if(OPTR.top==OPTR.base) return ERROR;
*p=*(OPTR.top-1);
return OK;
}
SElemType Pop(SqStack *OPTR)
{
SElemType e;
if(OPTR->top==OPTR->base) return ERROR;
e=*--OPTR->top;
return e;
}
Status InitStack(SqStack *OPND)
{
OPND->base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType ));
if(!OPND->base) exit (OVERFLOW);
OPND->top=OPND->base;
OPND->stacksize=STACK_INIT_SIZE;
return OK;
}
Status Push(SqStack *OPND,SElemType e)
{
if(OPND->top-OPND->base>=OPND->stacksize)
{
OPND->base=(SElemType *)realloc(OPND->base,(OPND->stacksize+STACKINCREMENT)*sizeof(SElemType ));
if(!OPND->base) exit (OVERFLOW);
OPND->top=OPND->base+OPND->stacksize;
OPND->stacksize+=STACKINCREMENT;
}
*(OPND->top)=e;OPND->top++;
return OK;
}
SElemType Pop(SqStack *OPND)
{
SElemType e;
if(OPND->top==OPND->base) return ERROR;
e=*--OPND->top;
return e;
}
main()
{
float result;
EvaluateExpression();
}
WEB开发文档2 总结
文件拷贝问题,大伙帮帮
忙
利用C#怎么样在IIS当怎样来创建站点?? ASP.Net(VB)中如何调用C#写的类? 如何遍历一个枚举 用反射得到一个类的属性名称,对属性的读写! 求asp.net中,...
Delphi与Word之间的融合技术
...Microsoft Word是一个集成化环境,是美国微软公司的字处理系统,但是它决不仅仅是一个字处 ... DocumentBeforeClose:在文档被关闭以前先于Word判断文档是否保存,给出相应提示并进行相应处理...
题解 | #获取所有非manager的员工emp_no#
京东运维后续一面结束时,面试官让我等HR沟通,结果没等来HR,等来的是他昨天加我,他应该是这个组的组长,反正不是HR,说做一个沟通交流,微信电话沟通了十分钟的样。#聊聊这家公司值得去吗# 公司岗位:嵌入式软件...
怎样规划你毕业以后的人生
现在开一个小公司,赚的钱刚够养家糊口的。看看这些刚毕业的学生,对前景也很迷茫,想抛砖引玉,谈谈自己的看法,局限于理工科的学生,我对文科的不懂,身边的朋友也没有这一类型的。 91年研究生毕业,那时出路就是...
Thinkpad常见问题大全(转载联想工程师博客)
这个问题总算是圆满解决了,也给我一个教训,遇到问题后,不要
忙
着下结论,这样很容易“冤枉好人”,多找找多看看,也许答案就在你的手边。 Q:恢复盘咋又多出一张DVD来?我的Create Recovery Media只...
Java SE
62,615
社区成员
307,307
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章