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

📄 魔王语言.cpp

📁 (1) 、用下述两条具体规则和规则形式实现.设大写字母表示魔王语言的词汇 小写字母表示人的语言词汇 希腊字母表示可以用大写字母或小写字母代换的变量.魔王语言可含人的词汇. (2) 、B→tAdA A
💻 CPP
字号:
// 魔王语言解释.cpp 

#include "stdlib.h"
#include "stdio.h"
#include "stdlib.h"
//========================================================
// 栈操作
//========================================================
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct
{
char *base;
char *top;
int stacksize;
}sqstack;

void initstack(sqstack &s) //初始化
{
s.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));
s.top=s.base;
s.stacksize=STACK_INIT_SIZE;
}
int stackempty(sqstack s) //判空
{
return s.top==s.base;
}
void push(sqstack &s,char e) //进栈
{
*s.top++=e;
}
void pop(sqstack &s,char &e) //出栈
{
e=*--s.top;
}
//================================================================
// 队列操作
//==================================================================
#define MAXQSIZE 100
typedef struct
{
char *base;
int front;
int rear;
}sqqueue;
void initqueue(sqqueue &q) //初始化
{
q.base=(char *)malloc(MAXQSIZE*sizeof(char));
q.front=q.rear=0;
}
int queuelength(sqqueue q) //求队列长度
{
return(q.rear-q.front+MAXQSIZE)%MAXQSIZE;
}
int queueempty(sqqueue q) //判空
{
return q.front==q.rear;
}
void enqueue(sqqueue &q,char e) //进队
{
q.base[q.rear]=e;
q.rear=(q.rear+1)%MAXQSIZE;
}
void dequeue(sqqueue &q,char &e) //出队
{
e=q.base[q.front];
q.front=(q.front+1)%MAXQSIZE;
}
//==================================================================
void pushA(sqstack &s1)
{
push(s1,'s');
push(s1,'a');
push(s1,'e');
}
void pushB(sqstack &s1)
{
push(s1,'t');
pushA(s1);
push(s1,'d');
pushA(s1);
}

//============================================================
void reserve(sqstack &s) //将 栈 就地逆置
{
int i,n=0;
char a[255];
while(!stackempty(s))
{
n++;
pop(s,a[n]); 
}
for(i=1;i<=n;i++)
{
push(s,a[i]);
}
}
//==============================================================
void main(int argc, char* argv[])
{printf("\t\t    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
 printf("\t\t      魔   王   语   言   解   释   \n");
 printf("\t\t    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n");
 printf("\t\t  *********   %%%%%  ###\n");
 printf("\n\n");

printf ("请输入魔王语言字符的个数:");
int n;
scanf("%d",&n);
getchar();
printf("\n");
char *a;
a=(char*)malloc(sizeof(char)*(n+1));
a[n]=0;
printf("请输入魔王语言:");
gets(a);
sqstack s;initstack(s);
sqstack s1;initstack(s1);
sqstack s2;initstack(s2);
sqqueue q;initqueue(q);

for(int i=n-1;i>=0;i--)
{
push(s,a[i]);
}
char e,e1;
i=0;
while(!stackempty(s))
{
pop(s,e);
if(e=='A')
pushA(s1);
if(e=='B')
pushB(s1);
if(e=='(')
{
pop(s,e);
while(e!=')')
{
enqueue(q,e);
pop(s,e);
}
dequeue(q,e);
while(!queueempty(q))
{
dequeue(q,e1);
a[i]=e1;
i++;
}
for(n=0;n<=i-1;n++)
{
push(s2,a[n]);
}
while(!stackempty(s2))
{
push(s1,e);
pop(s2,e1);
push(s1,e1);
}
push(s1,e);
}
}
reserve(s1);
printf("\n");
printf("魔王语言可解释成:");
while(!stackempty(s1))
{
pop(s1,e1);
printf("%c",e1);
}
printf("\n");
}

⌨️ 快捷键说明

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