📄 111.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 + -