@@@@@@@@@@@恳请哪位达人给帮个忙 小弟正做编译原理的课程设计(快到期了)遇到这么个问题:现有字符串表达式如:a+b*c-d,放在数组char aa[]中,另有两个数组分别存放a,b,c,d及其对应的值,abcd和其值存放的位置相同,char bb[] 中分别存放a,b,c,dint cc[]中放的是值1,2,3,4(即a的值是1,b的值是2,c的值是3,d的值是4)请问如何得到表达式的值,(给出算法思路也好啊!)多谢了!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 给你一个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(); } 不过c中的指针问题 ,在java中是很麻烦 数据库 接口 有关字符串显示格式的问题帮回答下 谢谢 100分求中文(繁体简体标点符号)在Unicode下的范围(要精确)在JDK1.4下,JDK1.4下 hibernate修改记录问题 如何检测到客户端socket是否与服务端serverSocket已连接 String小问题 这个问题真的很奇怪~~~~~~`天才们都进来看看啊 [求助]如何克隆?? 怎么把jdk的所有的类都取到?不要copy,paste Java的怪问题,请教各位请看看!! 如何把现有代码改成 工厂模式,OOP,AOP模式? socket的问题~~谁能搞定
#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(); }