魔王语言

作者在 2010-12-08 17:24:56 发布以下内容
#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 ;
}
程序 | 阅读 874 次
文章评论,共0条
游客请输入验证码
浏览31549次