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

📄 111.cpp

📁 魔王算法
💻 CPP
字号:
#include<stdio.h>
#include<stdlib.h>
#include <conio.h>
#include <windows.h>
#define M  100 
#define N 10 
char   e; 
char   word[M]; 

//栈的定义操作
typedef struct 
  { 
  char   *tail; //栈底指针
  char  *top;  //栈顶指针
  int   size; //栈的最大值
  }stack; 
int initstack (stack *s) 
  { 
  s->tail=(char *)malloc(M*sizeof(char)); 
  if(s->tail==NULL) exit (-1); 
  s->top=s->tail; 
  s->size=M; 
  return 1; 
  }/*创建栈*/ 
int push (stack *s,char e) 
  { 
  if(s->top-s->tail>=s->size) 
   exit(-1);
  else
  *(s->top++)=e; 
  return 1; 
  }/*入栈*/ 
int pop(stack *s,char *e) 
  { 
  if(s->top==s->tail) return 0; 
  *e=*(--(s->top)); 
  return 1; 
  }/*出栈*/ 

//3.队列的定义操作

typedef struct linknode 
  { 
  char   data; 
  struct linknode *next; 
  }linknode,*queueptr; 
typedef struct 
  { 
  queueptr front; 
  queueptr rear; 
  }linkqueue; 
int initqueue(linkqueue *q) 
  { 
  q->front=q->rear=(queueptr)malloc(sizeof(linknode)); 
  if(q->front==NULL) exit(-1); 
  q->front->next=NULL; 
  return 1; 
  }/*创建队列*/ 
int en_linkqueue(linkqueue *q,char e) 
  { 
  queueptr p; 
  p=(queueptr)malloc(sizeof(linknode)); 
  if(!p) exit(-1); 
  p->data=e; 
  p->next=NULL; 
  q->rear->next=p; 
  q->rear=p; 
  return 1; 
  }/*入队*/ 

int de_linkqueue(linkqueue *q,char *e) 
  { 
  queueptr p; 
  if(q->front==q->rear) return 0; 
  p=q->front->next; 
  *e=p->data; 
  q->front->next=p->next; 
  if(q->rear==p) 
    { 
    q->rear=q->front; 
    } 
  free(p); 
  return 1; 
  }/*出队*/ 



//语言翻译
void bigword(linkqueue *q,char word) 
  { 
  int j=0; 
  char a[10];
  switch(word) /*判断大写字母对应的字符串*/ 
    { 
    case'A':strcpy(a,"ase");break; 
    case'B':strcpy(a,"tsaedsae");break;
	case'C':strcpy(a,"cat");break; 
	case'D':strcpy(a,"dag");break; 
	case'E':strcpy(a,"eat");break; 
	case'F':strcpy(a,"fly");break;
	case'G':strcpy(a,"goose");break;
	case'H':strcpy(a,"head");break; 

    default:strcpy(a,"?"); /*不能翻译的魔王语言以”???”输出*/ 
    } 
  while(a[j]!='\0') /*如果数组还有字母*/ 
    { 
     en_linkqueue(q,a[j]);/*进队*/ 
    j++; 
    } 
  }/*括号内的处理*/ 
void stack1(stack *s) 
  { 
  int  i=0; 
  char   t; 
  char   c; 
  c=word[i ]; 
  for(i=0;c!='\0';i++)
    { 
    c=word[i ]; 
    if(c=='(')
      { 
      t=word[i+1];
      push(s,t);/*入栈*/ 
      i++;
      do 
        { 
        i++; 
        c=word[i ]; 
        push(s,c)/*第一次循环将次字母入栈*/; 
        push(s,t);/*再将首字母进栈*/ 
        } 
      while(c!=')');
      pop(s,&t);
      pop(s,&t);
      } 
    } 
  }
//处理函数 
int deal(stack *s,linkqueue *q) 
  { 
  char b;
  int i; 
  for(i=0;word[ i]!='\0';i++)
    { 
    b=word[ i]; 
    if( ('a'<=b&&b<='z') || b=='?') /*如果是小写字母或者’?’则直接进栈*/
      { 
      en_linkqueue(q,b); 
      } 
    else 
      { 
      if('A'<=b&&b<='Z') /*如果是大写字母,则调用特殊进栈函数,*/
        { 
        bigword(q,b); 
        } 
      else 
        { 
        if(b=='(')/*如果是括号*/
          { 
          do 
            { 
            pop(s,&e);
			if('A'<=e&&e<='Z') /*如果是大写字母,则调用特殊进栈函数,*/
			{ 
               bigword(q,e); 
			}else
            en_linkqueue(q,e); 
            } 
          while(!(s->top==s->tail)); /*只要栈不为空,则出栈进队*/
          while (b!=')')
            { 
            i++; 
            b=word[ i]; 
            } 
          } 

        } 
      } 
    } 
 return  1; 
  }
huanyin(){
	char ch;
		printf("\n");
        printf("\n");
        printf("\n");
        printf("*****************************欢迎使用魔王语言翻译系统**************************\n");
		printf("|                           &                       &                          |\n"); 
		printf("|                        &                             &                       |\n");
		printf("|                           &                       &                          |\n"); 
        printf("*****************************欢迎使用魔王语言翻译系统**************************\n");
		printf("按任意键进入\n");
		ch=getche();
	    return 0;
	};
//7.主函数 
void main() 
    { 
	char translate[2*M],ch;
    stack s1; 
    linkqueue q1;
	initstack(&s1); /*创建栈*/ 
    initqueue(&q1); /*创建队*/ 
    int k=0;
	huanyin();
    system("cls");
	do{
    printf("\n\n\n\n\n***************************************\n"); 
    printf("请输入魔王的语言:\n"); 
    scanf("%s",word);
	 system("cls");
    stack1(&s1);//括号内的元素处理
    deal(&s1,&q1);//处理后入队列
	printf("\n\n魔王的语言翻译成中文如下:\n");
    while(q1.front!=q1.rear)
            { 
            de_linkqueue(&q1,&e); 
            word[k]=e; 
			switch (word[k])
			{
			case 'a': strcpy(translate,"一个");printf("%s",translate);break;
            case 't': strcpy(translate,"天");printf("%s",translate);break;
            case 'd': strcpy(translate,"地");printf("%s",translate);break;
            case 's': strcpy(translate,"上");printf("%s",translate);break;
            case 'e': strcpy(translate,"鹅");printf("%s",translate);break;
            case 'z': strcpy(translate,"追");printf("%s",translate);break;
            case 'g': strcpy(translate,"赶");printf("%s",translate);break;
            case 'x': strcpy(translate,"下");printf("%s",translate);break;
            case 'n': strcpy(translate,"蛋");printf("%s",translate);break;
            case 'i': strcpy(translate,"恨");printf("%s",translate);break;
			default : strcpy(translate,"?");printf("%s",translate);
			}
            k++; 
            } 
          word[k]='\0';
    printf("\n\n\n\n\n魔王的语言翻译后如下:%s\n",word);
	printf("do you want to translate another word:(y/n)/y");
    ch=getche();
	system("cls");
	}while(ch!='n');
}

⌨️ 快捷键说明

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