C语言:计算器算法中的括号问题
编了一个计算器的程序,如果要实现括号的运算,不知道怎么改!!!#include<stdio.h>
#include<malloc.h>
typedef struct
{
char *base;
char *top;
int stacksize;
}SqStack1;
typedef struct
{
int *base;
int *top;
int stacksize;
}SqStack2;
void InitStack1(SqStack1 &OPTR)
{
OPTR.base=(char *)malloc(100*sizeof(char));
OPTR.top=OPTR.base;
OPTR.stacksize=100;
}
void InitStack2(SqStack2 &OPND)
{
OPND.base=(int *)malloc(100*sizeof(int));
OPND.top=OPND.base;
OPND.stacksize=100;
}
void Push1(SqStack1 &OPTR,char a)
{
if(OPTR.top-OPTR.base>=OPTR.stacksize)
{
OPTR.base=(char *)realloc(OPTR.base,(OPTR.stacksize+100)*sizeof(char));
OPTR.top=OPTR.base+OPTR.stacksize;
OPTR.stacksize+=100;
}
OPTR.top++;
*OPTR.top=a;
}
void Push2(SqStack2 &OPND,int b)
{
if(OPND.top-OPND.base>=OPND.stacksize)
{
OPND.base=(int *)realloc(OPND.base,(OPND.stacksize+100)*sizeof(int));
OPND.top=OPND.base+OPND.stacksize;
OPND.stacksize+=100;
}
OPND.top++;
*OPND.top=b;
}
char Pop1(SqStack1 &OPTR)
{
char c;
c=*(OPTR.top--);
return c;
}
int Pop2(SqStack2 &OPND)
{
int d;
d=*(OPND.top--);
return d;
}
char GetTop1(SqStack1 OPTR)
{
char e;
e=*(OPTR.top--);
return e;
}
int GetTop2(SqStack2 OPND)
{
int e;
e=*(OPND.top--);
return e;
}
int Precede(char a,char b)//第一个为GetTop的数值,第二个为将要进入的数值
{
if((a=='+'||a=='-')&&(b=='+'||b=='-'))
return 1;
if((a=='*'||a=='/')&&(b=='*'||b=='/'))
return 1;
if((a=='*'||a=='/')&&(b=='+'||b=='-'))
return 1;
if((a=='+'||a=='-')&&(b=='*'||b=='/'))
return 0;
else return -1;
}
int Operate(int a,int b,char c)
{
if(c=='+') return b+a;
if(c=='-') return b-a;
if(c=='*') return b*a;
if(c=='/') return b/a;
}
void main()
{
char a,b;
int c,d,e,f,g;
SqStack1 OPTR;
SqStack2 OPND;
InitStack1(OPTR);
InitStack2(OPND);
Push1(OPTR,'#');
scanf("%d",&c);
Push2(OPND,c);
a=getchar();
while(a!='#')
{
d=Precede(GetTop1(OPTR),a);
if(d==1)
{
e=Pop2(OPND);
f=Pop2(OPND);
g=Operate(e,f,GetTop1(OPTR));
Pop1(OPTR);
Push2(OPND,g);
Push1(OPTR,a);
scanf("%d",&c);
Push2(OPND,c);
a=getchar();
if(a=='#')
{
e=Pop2(OPND);
f=Pop2(OPND);
g=Operate(e,f,b=Pop1(OPTR));
Push2(OPND,g);
c=Pop2(OPND);
}
}
if(d==0)
{ scanf("%d",&c);
Push2(OPND,c);
Push1(OPTR,a);
e=Pop2(OPND);
f=Pop2(OPND);
g=Operate(e,f,a);
Push2(OPND,g);
Pop1(OPTR);
a=getchar();
if(a=='#')
{
e=Pop2(OPND);
f=Pop2(OPND);
g=Operate(e,f,b=Pop1(OPTR));
Push2(OPND,g);
c=Pop2(OPND);
}
}
if(d==-1)
{
scanf("%d",&c);
Push2(OPND,c);
Push1(OPTR,a);
a=getchar();
if(a=='#')
{
e=Pop2(OPND);
f=Pop2(OPND);
g=Operate(e,f,b=Pop1(OPTR));
Push2(OPND,g);
c=Pop2(OPND);
}
}
}
printf("%d",c);
printf("\n");
}