魔王语言C语言代码
#include <stdio.h>#define StackElementType char
#define Stack_Size 100
typedef struct
{StackElementType elem[Stack_Size];
int top;
}SeqStack;
void InitStack(SeqStack *s);/*初始化栈*/
void Push(SeqStack *s,StackElementType x); /*进栈操作*/
void Pop(SeqStack *s,StackElementType *x);/*出栈操作*/
void GetTop(SeqStack *s,StackElementType *x);/*取栈顶元素*/
int IsEmpty(SeqStack *s);/*判断栈是否为空*/
void GhostLanage();/*魔王语言翻译函数*/
/*主函数*/
main()
{
GhostLanage();
printf("\n\t按任意键退出\n\n");
}
/*初始化栈*/
void InitStack(SeqStack *s)
{s->top=-1;
}
/*进栈操作*/
void Push(SeqStack *s,StackElementType x)
{if(s->top==Stack_Size-1)
printf("\n\t栈已满!");
else {s->top++;s->elem[s->top]=x;}
}
/*出栈操作*/
void Pop(SeqStack *s,StackElementType *x)
{if(s->top==-1)
printf("\n\t栈为空!");
else {*x=s->elem[s->top];s->top--;}
}
/*取栈顶元素*/
void GetTop(SeqStack *s,StackElementType *x)
{if(s->top==-1)
printf("\n\t栈为空!");
else *x=s->elem[s->top];
}
/*判断栈是否为空*/
int IsEmpty(SeqStack *s)
{if(s->top==-1) return(0);
else return(1);
}
/*魔王语言翻译函数*/
void GhostLanage()
{SeqStack B,A,s,B1,A1,r,M;
StackElementType ch,ch1,ch2,x;
char aa[100];
int choice,i=0,n;
InitStack(&B);InitStack(&A);InitStack(&s);InitStack(&r);InitStack(&M);
printf("\n\n 请选择魔王语言的转换形式:\n\t1.B->tAdA A->sae\n\t2.^^^^\n\t3.^^^^\n");
scanf("%d",&choice);
switch(choice)
{case 1: Push(&B,'t');Push(&B,'A');Push(&B,'d');Push(&B,'A');
Push(&A,'s');Push(&A,'a');Push(&A,'e');break;
case 2:;break;
case 3:;break;
}
if(choice==1)
printf("\n\t你选择的是:B->tAdA A->sae\n");
if(choice==2)
printf("\n\t你选择的是:^^^\n");
if(choice==3)
printf("\n\t你选择的是:^^^\n");
printf("\n\t请输入要翻译的魔王语言\n");
scanf("%s",aa);
for(i=0;aa[i]!='\0';i++)
Push(&s,aa[i]);
while(IsEmpty(&s))
{Pop(&s,&ch);
if(ch=='B')
{B1=B;
while(IsEmpty(&B1))
{Pop(&B1,&ch1);
if(ch1=='A')
{A1=A;
while(IsEmpty(&A1))
{Pop(&A1,&ch2);
Push(&r,ch2);
}
}
else Push(&r,ch1);
}
}
else if(ch=='A')
{A1=A;
while(IsEmpty(&A1))
{Pop(&A1,&ch2);
Push(&r,ch2);
}
}
else if(ch==')')
{Pop(&s,&ch2);
while(ch2!='(')
{Push(&M,ch2);
Pop(&s,&ch2);
}
GetTop(&M,&ch2);
x=ch2;
Pop(&M,&ch2);
while(IsEmpty(&M))
{Push(&r,x);
Pop(&M,&ch2);
Push(&r,ch2);
}
Push(&r,x);
}
else Push(&r,ch);
}
M=r;
printf("\n\n\t翻译的结果为:");
while(IsEmpty(&M))
{Pop(&M,&ch);
printf("%c",ch);
}
printf("\n\n\t是否继续翻译为汉语:(1-继续,0-不继续)");
scanf("%d",&n);
if(n==1)
{ printf("\n\n\t翻译为汉语的结果为:\n\n\t");
M=r;
while(IsEmpty(&M))
{Pop(&M,&ch);
if(ch=='t') printf("天");
else if(ch=='d') printf("地");
else if(ch=='s') printf("上");
else if(ch=='a') printf("一只");
else if(ch=='e') printf("鹅");
else if(ch=='z') printf("追");
else if(ch=='g') printf("赶");
else if(ch=='x') printf("下");
else if(ch=='n') printf("蛋");
else if(ch=='h') printf("恨");
}
printf("\n");
}
else ;
}