📄 新建 文本文档.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 + -