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

📄 mowang.cpp

📁 魔王语法解释 数据结构的实验和实验报告
💻 CPP
字号:
#include <stdio.h>
#include <assert.h>
#include <malloc.h>
#include <string.h>
/*
 ************** Stack **********
 */
typedef struct  _StackNode{
    char                 data;
    struct  _StackNode  *next;
    struct  _StackNode  *pri;
}*StackNode;

typedef struct  _Stack{
    int         size;
    StackNode   bottom;
    StackNode   top;
}*Stack;

/*
 *
 */
/*
分配栈结点,并赋值data
*/
inline StackNode
stacknodemalloc( char data )
{
    StackNode p = (StackNode)malloc(sizeof(struct _StackNode));
    assert(p);
    p->data = data;
    return p;
}

/*
栈空吗?
*/
inline bool
stackempty( Stack stack )
{
    return (stack->size)?false:true;
}

/*
建一个栈,并初始化
*/
Stack
stackcreat(void)
{
    Stack   p = (Stack)malloc(sizeof(struct _Stack));
    assert(p);
    p->size=0;
    p->bottom=p->top=NULL;
    return p;
}

/*
压栈
*/
bool
stackpush( Stack stack,char data )
{
    StackNode node = stacknodemalloc( data );
    if( stackempty(stack) ){
        stack->bottom=stack->top=node;
        node->pri=NULL;
    }else{
        node->pri=stack->top;
        stack->top->next=node;
        stack->top=node;
    }
    ++stack->size;
    return true;
}

/*
出栈并返回data
*/
char
stackpop( Stack stack )
{
    StackNode p=stack->top->pri;
    char t = stack->top->data;

    assert( ! stackempty(stack) );

    free( stack->top );
    if( --stack->size == 0 ){
        stack->bottom=stack->top = NULL;
    }else{
        stack->top = p;
    }
    return t;
}

/*
销毁栈
*/
void
stackdestory( Stack stack )
{
    while( !stackempty( stack ) ){
        stackpop( stack );
    }
    free( stack );
}

/*
 * ********************************************
 */
char *map[]={"天 ","地 ","上 ","一只 ","鹅 ","追 ","赶","下 ","蛋","恨 "
};

char *
charmap(char c)
{
    char *p;
    switch(c){
        case 't':
            p=map[0];
            break;
        case 'd':
            p=map[1];
            break;
        case 's':
            p=map[2];
            break;
        case 'a':
            p=map[3];
            break;
        case 'e':
            p=map[4];
            break;
        case 'z':
            p=map[5];
            break;
        case 'g':
            p=map[6];
            break;
        case 'x':
            p=map[7];
            break;
        case 'n':
            p=map[8];
            break;
        case 'h':
            p=map[9];
            break;
        default:
            p=NULL;
            break;
    };
    return p;
}

int
main(void)
{
    char input[256],*i_iter=input;
    char output[256],*o_iter=output,*p=o_iter;

    scanf("%s",input);

    while(*i_iter){
        if(*i_iter == 'B'){
            strcpy(o_iter,"tsaedsae");
            o_iter=&p[strlen(p)];
            ++i_iter;
        }
		else{
            if(*i_iter>='a'&&*i_iter<='z'){
                char h=*i_iter++;
                Stack stack=stackcreat();
                for(;*i_iter>='a'&&*i_iter<='z';++i_iter){
                    stackpush(stack,*i_iter);
                }
                while(!stackempty(stack)){
                    *o_iter++=h;
                    *o_iter++=stackpop(stack);
                }
                stackdestory(stack);
            }
			else{
                ++i_iter;
            }
        }
    }
    *o_iter='\0';

    while(*p){
        fprintf(stdout,"%s",charmap(*p++));
    }

   scanf("%s",input);
   return(0);

}

⌨️ 快捷键说明

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