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