⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shiyanzhong1.c

📁 有一个魔王总是使用自己的一种非常简练而抽象的语言讲话
💻 C
字号:

//******************************************************************************
#include <stdio.h>
#include <stdlib.h>
#define  stack_init_size  100;
#define  stackincrement   10;
#define  lea   100*sizeof(char)
typedef struct{
     int base;
     int top;
    char data[60]; 
   int stacksize;
}sqstack;
struct qnode{
    char data;           
    struct qnode *next;        
};
struct linkqueue{
    struct qnode *front;    
    struct qnode *rear;       
};

int stackempty(sqstack *s){ 
if(s->top==-1) return 1; 
return 0; 
} 

void initstack(sqstack *s)
{
 s->top=-1;
}

void push(sqstack *s,char e){

s->top++;
s->data[s->top]=e;
}
char pop(sqstack *s){

if(s->top==-1)  return -1;
return s->data[s->top--];
}
void initqueue(struct linkqueue *q)
{
    q->front = q->rear = NULL;       
    return;
}


void enqueue(struct linkqueue *q, char e)
{
    
    struct qnode *P;
    P = malloc(sizeof(struct qnode));
    if(P == NULL){
        printf("内存空间分配失败! ");
        exit(1);
    }
    
    P->data = e;
    P->next = NULL;
    
    if(q->rear == NULL){
        q->front = q->rear = P;
    }else{    
        q->rear = q->rear->next = P;      
    }
    return;
}


char dequeue(struct linkqueue *q)
{
    struct qnode *p;
    char e;
   
    if(q->front == NULL){
        printf("队列为空,无法删除! ");
        exit(1);
    }
    e = q->front->data;       
    p = q->front;              
    q->front = p->next;       
    
    if(q->front == NULL){
        q->rear = NULL;
    }
    free(p);        
    return e;    
}

int queueempty(struct linkqueue *q)
{
    
    if(q->front == NULL){
        return 1;
    }else{
        return 0;
    }
}
///***********************************************************************

void main()
{
  int t;int o=0;
 int s;char e; 
char str[60];
char m[]={"tAdA"};
int v,i,h,l,x;
int j=0;int k=0;
int flag=1;
char z;
char n[60];char y[60];
struct linkqueue w;
struct linkqueue d;
sqstack a,b,c,f;

k=strlen(m);
initstack(&a);
initstack(&b);
initstack(&c);
initstack(&f);
initqueue(&w);
initqueue(&d);
 while(o==0){
  system("cls");
  printf("****************************************************************************\n");
  printf("                        魔王语言解释                              \n");
  printf("*****************************************************************************\n");
  printf("|\t   姓名:何卿仪\t  班级:计科10班\t   学号:3205006712\t  |\n");
  printf("****************************************************************************\n");
  printf("\n");
  printf("使用说明:\n\n");
  printf("魔王语言有两种形式,有一种是你可以自己创建,但有一种是程序已经规定了的\n\n");
  printf("*******************************菜单******************************************\n\n");
  printf("1==>语言解释\t2==>创建规则");
   printf("\n");
  printf("\n*****************************************************************************\n");
  printf("\n欢迎进入魔王世界:");
  scanf("%d",&t);
//*******************************************************************************************

  if(t==2){
   system("cls");
   printf("       *******************************************************             \n");
   printf("       *                                                     *             \n");
   printf("       * 创建说明:                                          *             \n");
   printf("       *                                                     *             \n");
   printf("       * 只能够输入这样的形式:大写字母-小写字母(如:A-bsdf)*             \n");
   printf("       *                                                     *             \n");
   printf("       *                                                     *             \n");
   printf("       *******************************************************             \n\n");
 printf("魔王的语言:\n");
while(flag!=0){
scanf("%s",n);
h=k;
k=k+strlen(n);
for(i=h;i<=k;i++)
{
	str[i]=n[j];
	j++;
}//for
j=0;
printf("你可以继续建立规则,想退出的话就按0\n");
scanf("%d",&flag);
}//while
printf("你现在可以运用你刚才建立的规则来查询魔王的语言\n");
scanf("%s",m);
x=strlen(m);
for(v=0;v<=x;v++)
{
 for(l=0;l<=k;l++)
 {
  if(m[v]==str[l])
  {
  l=l+2;
  while(str[l]>=97)
   { 
  enqueue(&w,str[l]);
  l++;
   }//while

  }//if

 }//for     
 }//for
printf("魔王的意思是:\n");
while(!queueempty(&w)){
printf("%c",dequeue(&w));
}//while
printf("\n");


getchar();
printf("\n若要退出请输入(0):");
scanf("%d",&o);
}//if

//**********************************************************************************  

 if(t==1){
 system("cls");
   printf("       *******************************************************             \n");
   printf("       *                                                     *             \n");
   printf("       *  创建说明:                                         *             \n");
   printf("       *                                                     *             \n");
   printf("       *  请输入测试数据:B(ehnxgz)B                         *             \n");
   printf("       *                                                     *             \n");
   printf("       *                                                     *             \n");
   printf("       *******************************************************             \n\n");
printf("你想翻译的魔王的语言是:\n");
scanf("%s",y);
s=strlen(y);
i=0;
push(&a,y[i]);
i++;
push(&f,y[i]);
i++;
e=y[i];
enqueue(&d,y[i]);
i++;
while(y[i]!=')')
{
 enqueue(&d,y[i]);
 enqueue(&d,e);
 i++;
}
push(&f,y[i]);
i++;
push(&a,y[i]);
e=pop(&a);//第一个B
for(i=0;i<k;i++)
 {
 e=m[i];
 push(&b,e);
     }//for
while(!stackempty(&b)){
e=pop(&b);
push(&c,e);    //把第一个B放进C
}

e=pop(&a);//最后一个B
 for(i=0;i<k;i++){
 e=m[i];
 push(&b,e);
     }

while(!queueempty(&d)){
 e=dequeue(&d);
 push(&c,e);
 }

while(!stackempty(&b)){
e=pop(&b);
push(&c,e);    //把第二个B放进C
}

printf("\n");
printf("魔王的实际意思是:\n");
while(!stackempty(&c)){
 z=pop(&c);
 if(z=='A') {printf("sae"); z=pop(&c);}
printf("%c",z);
}

printf("\n");
getchar();
printf("\n若要退出请输入(0):");
scanf("%d",&o);

   }//if
  
  }//while
  }//main

 //***************************************************************************** 




















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -