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

📄 mwyy2.cpp

📁 一:需求分析 1. 问题描述 魔王总是使用自己的一种非常精练而抽象的语言讲话,没人能听懂,但他的语言是可逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: -
💻 CPP
字号:
#include "stdio.h"
#include "string.h"
#include "conio.h"
#include "stdlib.h"
#define MAX 256
/*入栈*/
void pushstack(char s[],char x,int flag,int *top)           /*flag表示入栈种类:1表示翻译入栈。0表示直接入栈*/
{
    char k[20];
    int m,i;
    if(flag==1)
    {
        if(x=='A')
        {
            strcpy(k,"sae");
            m=strlen(k);
            for(i=0;i<m;i++)
            {
                if(*top>MAX-1)
                {
                    printf("上溢!");
                    exit(0);
                }
                else
                    s[++(*top)]=k[m-1-i];
            }
        }
        else if(x=='B')
        {
            strcpy(k,"tsaedsae");
            m=strlen(k);
            for(i=0;i<m;i++)
            {
                if(*top>MAX-1)
                {
                    printf("上溢!");
                    exit(0);
                }
                else
                    s[++(*top)]=k[m-1-i];
            }
        }
        else
            s[++(*top)]=x;
    }
    else
        s[++(*top)]=x;
}

/*字典*/
void charmap(char x)
{
    switch(x)
    {
        case 't':    printf("天");      break;
        case 'd':    printf("地");      break;
        case 's':    printf("上");      break;
        case 'a':    printf("一只");    break;
        case 'e':    printf("鹅");      break;
        case 'z':    printf("追");      break;
        case 'g':    printf("赶");      break;
        case 'x':    printf("下");      break;
        case 'n':    printf("蛋");      break;
        case 'i':    printf("恨");      break;
        default :    break;
    }
}

void main (void)
{
    char s1[MAX],s2[MAX],d[MAX];
    int flag=0,i,t;
    int top1=-1,top2=-1,front=-1,rear=-1;
    printf("请输入魔王语言:\n");
    scanf("%s",s2);
    t=strlen(s2);
    for(i=0;i<t;i++)
        pushstack(s1,s2[t-1-i],0,&top1);
    while(top1!=-1)
    {
        if(s1[top1]=='(')
        {
            t=s1[--top1];
            d[++rear]=s1[top1--];
            while(s1[top1]!=')')
            {
                d[++rear]=s1[top1--];
                d[++rear]=t;
            }
            top1--;  /*让‘)’不入栈*/
            flag=0; /*初始计数标志,记录括号后面的字母的个数*/
        }
        pushstack(s2,s1[top1--],0,&top2);         /*将括号外面的字母入栈*/
        flag++;
    }
    while((flag--)!=0)
        pushstack(s1,s2[top2--],1,&top1);
    while(rear!=front)
        pushstack(s1,d[++front],1,&top1);       /*出队入栈*/
    while(top2!=-1)
        pushstack(s1,s2[top2--],1,&top1);
    printf("魔王语言翻译成人的语言是:\n");
    while(top1!=-1)                                                    /*最终栈s1中存着翻译好的字母*/
    {
        charmap(s1[top1--]);
        /*printf("%c",s1[top1--]); */
     }

    getch();
}

⌨️ 快捷键说明

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