| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 397 人关注过本帖
标题:表达式求值中的一个问题1
只看楼主 加入收藏
yuesheng
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-4-21
收藏
 问题点数:0 回复次数:0 
表达式求值中的一个问题1

看下面那个Precede函数哪里出了问题,不能输出!
#define STACK_INIT_SIZE 100
#include "stdio.h"
#include "stdlib.h"

int i,j;
char a[7]={'+','-','*','/','(',')','#'};
char b[7][7]={
{'>','>','<','<','<','>','>'},
{'>','>','<','<','<','>','>'},
{'>','>','>','>','<','>','>'},
{'>','>','>','>','<','>','>'},
{'<','<','<','<','<','=',' '},
{'>','>','>','>',' ','>','>'},
{'<','<','<','<','<',' ','='}
};

typedef struct
{
int *base;
int *top;
int stacksize;
} *SqStack_I;

typedef struct
{
char *base;
char *top;
int stacksize;
} *SqStack_C;

SqStack_I InitStack_I()
{
SqStack_I S;
S->base=(int*)malloc(STACK_INIT_SIZE*sizeof(int));
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
return S;
}

SqStack_C InitStack_C()
{
SqStack_C S;
S->base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));
S->top=S->base;
S->stacksize=STACK_INIT_SIZE;
return S;
}

SqStack_I Push_I(SqStack_I S,char e)
{ int w;
w=e-48;
*S->top++=w;
return S;
}

SqStack_C Push_C(SqStack_C S,char e)
{
*S->top++=e;
return S;
}

int Pop_I(SqStack_I S)
{
int e;
e=*--S->top;
return e;
}

char Pop_C(SqStack_C S)
{
char e;
e=*--S->top;
return e;
}

int GetTop_I(SqStack_I S)
{
int e;
e=*(S->top-1);
return e;
}

char GetTop_C(SqStack_C S)
{
char e;
e=*(S->top-1);

return e;
}

int In(char c)
{if(c<='9'&&c>='0') return 1;
else return 0;
}

char Precede(char d,char c)
{ int m,n;
for(i=0;i<7;i++)
if(d==a[i]) m=i;
printf("%d",m);
for(j=0;j<7;j++)
if(c==a[j]) n=j; /*printf("%d",n);*/
/*printf("%d,%d",i,j); */
return b[m][n];
/* printf("%c",b[i][j]);*/
}

int Operate(int a,char theta,int b)
{
if (theta=='+') return (a+b);
if (theta=='-') return (a-b);
if (theta=='*') return (a*b);
if (theta=='/') return (a/b);
}

main()
{
int x,y;
char c,theta;
SqStack_C OPTR;
SqStack_I OPND;
OPTR=InitStack_C();
Push_C(OPTR,'#');
/*printf("%c",GetTop_C(OPTR));*/

OPND=InitStack_I();
c=getchar();
Precede('#','+');
while (c!='#'||GetTop_C(OPTR)!='#')
{if(In(c)) {Push_I(OPND,c);c=getchar();/*printf("%d\n",GetTop_I(OPND));*/}
else
switch (Precede(GetTop_C(OPTR),c))
{ /*printf("%c",GetTop_C(OPTR));*/
/*printf("%c",Precede(GetTop_C(OPTR),c));*/
case'<': Push_C(OPTR,c); c=getchar(); break;
case'=': Pop_C(OPTR); c=getchar(); break;
case'>': theta=Pop_C(OPTR);
x=Pop_I(OPND); y=Pop_I(OPND);
Push_I(OPND,Operate(x,theta,y)+48);
break;
}
}
printf("%d\n",GetTop_I(OPND));
getchar();
getchar();

}

搜索更多相关主题的帖子: 表达式 include 
2007-04-23 22:03
快速回复:表达式求值中的一个问题1
数据加载中...
 
   



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

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