#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define length 11
#define STACK_INIT_SIZE 31
#define OK 1
#define ERROR 0
#define OVERFLOW 0
#define STACKINCREMENT 10
typedef struct SqStack{
char *base;
char *top;
int stacksize;
}SqStack;
int InitStack(SqStack &S){
S.base = (char *)malloc(STACK_INIT_SIZE * sizeof(char));
if(!S.base) exit (OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}
int push(SqStack &S,char e){
if (S.top - S.base>=S.stacksize){
S.base = (char *) realloc (S.base,(S.stacksize + STACKINCREMENT) * sizeof (char));
if (!S.base) return OVERFLOW;
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top++ = e;
return OK;
}//push
int pop(SqStack &S,char &e) {
if (S.top == S.base) return ERROR;
e = * --S.top;
return OK;
}//Pop
main()// ½âÊÍħ¹íÓïÑÔ
{
char *p,t,y;
char str[length];
printf("ÇëÊäÈë×Ö·û´®");
gets(str);
p=str;
SqStack s1,s2;
InitStack(s1);
while(*p!='\n')
{
switch(*p)
{
case'A':{
t='s';
push(s1,t);
t='a';
push(s1,t);
t='e';
push(s1,t);
} break;
case'B':{
t='t';
push(s1,t);
t='s';
push(s1,t);
t='a';
push(s1,t);
t='e';
push(s1,t);
t='d';
push(s1,t);
t='s';
push(s1,t);
t='a';
push(s1,t);
t='e';
push(s1,t);
} break;
case'(':{
char *q,x;
q=p;
while(q!=")")
{
q++;
}
x=*(++p);
++p;
while(p!=q)
{
push(s1,x);
push(s1,*p);
p++;
}
push(s1,x);
p=++q;
} break;
default:push(s1,*p); break;
p++;
}
}
InitStack(s2);
while(s1.top!=s1.base)
{
pop(s1,y);
push(s2,y);
}
while(s2.top!=s2.base)
{
pop(s2,y);
switch(y)
{
case't':printf("Ìì"); break;
case'd':printf("µØ"); break;
case's':printf("ÉÏ"); break;
case'a':printf("Ò»Ö»"); break;
case'e':printf("¶ì"); break;
case'z':printf("×·"); break;
case'g':printf("¸Ï"); break;
case'x':printf("ÏÂ"); break;
case'n':printf("µ°"); break;
case'h':printf("ºÞ"); break;
}
}
return OK;
}
麻烦帮忙看一下有什么问题,谢谢
回复 更多评论