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

📄 新建 文本文档.txt

📁 有一个魔王总是使用自己的一种非常精练而抽象的语言讲话
💻 TXT
字号:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define Null 0
#define MAXQSIZE 100
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10

struct SqStack
{
	char *base;
	char *top;
	int stacksize;
}/*SqStack*/;

struct Squeue
{
	char *base;
	int *front;
	int *rear;
}Q;

struct Squeue q[31];
char *rule[31];

struct SqStack InitStack()		/*建立一个空栈*/
{
	struct SqStack S1;
	S1.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
	if(!S1.base) exit(0);
		S1.top=S1.base;
	S1.stacksize=STACK_INIT_SIZE;
	return(S1);
}

void Push(struct SqStack S1,char ch)		/*元素进栈*/
{
	if(S1.top-S1.base>=S1.stacksize)
		{ 
			S1.base=(char *)realloc(S1.base,(S1.stacksize+STACKINCREMENT)*sizeof(char));
			if(!S1.base)	exit(0);
			S1.top=S1.base+S1.stacksize;
			S1.stacksize+=STACKINCREMENT;
		}
	*S1.top++=ch;
}

char Pop(struct SqStack S1)			/*栈顶元素出栈*/
{
	char ch;
	if(S1.top==S1.base) exit(0);
	ch=*--S1.top;
	return(ch);
}

struct Squeue InitQueue()		/*建立一个空队列*/
{ 
	struct Squeue Q1;
	Q1.base=(char *)malloc(MAXQSIZE*sizeof(char));
	if(!Q1.base) exit(0);
	Q1.front=(int *)malloc(MAXQSIZE*sizeof(int));
	*Q1.front=0;
	Q1.rear=(int *)malloc(MAXQSIZE*sizeof(int));
	*Q1.rear=0;
	return(Q1);
}

void EnQueue(struct Squeue Q1,char e)		/*元素入队列*/
{
	if((*Q1.rear+1)>MAXQSIZE)
	Q1.base=(char *)realloc(Q1.base,(*Q1.rear-*Q1.front+STACKINCREMENT)*sizeof(char));
	Q1.base[*Q1.rear]=e;
	(*Q1.rear)++;
}

void readrules()		/* 读入魔王语言的翻译规则*/
{
	int i;
	char ch;
	for(i=0;i<=31;i++)	rule[i]=Null;
	cout<<"请输入魔王语言的翻译规则"<<endl
		<<endl
		<<"提示:只输入回车键完成翻译规则的输入"<<endl;
	printf("\n请输入一个魔王语言的字符:");
	ch=getchar();
	while(ch<='Z'&&ch>='A')
	{
		printf("\n请输入这个字符对应的人的语言:");
		rule[ch-'A']=(char *)malloc(MAXQSIZE*sizeof(char));
		scanf("%s",rule[ch-'A']);
		printf("\n请输入一个魔王语言的字符:");
		scanf("%c",&ch);
		ch=getchar();
	}

}

void copy(struct Squeue Q1,struct Squeue Q2)
{ 
	int k;
	char ch;
	k=*Q2.front;
	while(k!=*Q2.rear)
	{
		ch=Q2.base[k];
		EnQueue(Q1,ch);
		k++;
	}
}

void changrules( )		/*将魔王的语言全部转换为人的语言*/
{
	int i;
	char *p;
	for(i=0;i<=31;i++)
	{
		p=rule[i];
		if(p)
		{
			q[i]=InitQueue();
			while(*p!='\0')
			{
				if(*p<='z'&&*p>='a') 
					EnQueue(q[i],*p);
				else
					copy(q[i],q[*p-'A']);
				p++;
			}
		}
	}
}

char *translate(char *mm)		/*对应于带括号的魔王语言的翻译方法*/
{
	char ch,th;
	struct SqStack S;
	S=InitStack();
	ch=*mm;
	mm++;
	while(*mm!=')')
	{
		Push(S,*mm);
		S.top++;mm++;
	}
	while(!(S.top==S.base))
	{
		EnQueue(Q,ch);
		th=Pop(S);S.top--;
		EnQueue(Q,th);
	}
	EnQueue(Q,ch);
	return(mm);
}

void main()
{
	int i;
	char *elem,*tt;
	Q=InitQueue();
	readrules();
	changrules();
	printf("\n请输入一句魔王的语言:");
	tt=(char *)malloc(MAXQSIZE*sizeof(char));
	scanf("%s",tt);
	elem=tt;
	while(*elem!='\0')
	{ 
		if(*elem<='z'&&*elem>='a') EnQueue(Q,*elem);
		else if(*elem<='Z'&&*elem>='A')
				copy(Q,q[*elem-'A']);
			else if(*elem=='(') 
			{
				elem++;
				elem=translate(elem);}
				elem++;
			}


	for(i=*Q.front;i<*Q.rear;i++)
		printf("%c",Q.base[i]);
	printf("\n");

	for(i=*Q.front;i<*Q.rear;i++)
	{
		switch(Q.base[i])	
		{
			case 'e':printf("鹅");break;
			case 't':printf("天");break;
			case 's':printf("上");break;
			case 'a':printf("一只");break;
			case 'd':printf("地");break;
			case 'z':printf("追");break;
			case 'g':printf("赶");break;
			case 'x':printf("下");break;
			case 'n':printf("蛋");break;
			case 'h':printf("恨");break;
			default:printf("%c",Q.base[i]);break;
		}
	}
	printf("\n");
} 

⌨️ 快捷键说明

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