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