快捷搜索:  汽车  科技

凡尘c语言(c语言翻译魔王的语言)

凡尘c语言(c语言翻译魔王的语言)运行结果

题目要求:

传说有一个魔王使用自己的语言说话,没人能够听得懂他的语言。后来从国外来了一位智者,他发现魔王的语言可以逐步翻译成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的。

凡尘c语言(c语言翻译魔王的语言)(1)

规律

#include "stdio.h" #define STACK_INIT_SIZE 20 #define STACKINCREMENT 10 typedef char ElemType; /*将char类型定义为ElemType*/ typedef struct{ /*定义一个栈类型*/ ElemType *base; ElemType *top; int stacksize; }sqStack; initStack(sqStack *s) { /*内存中开辟一段连续空间作为栈空间,首地址赋值给s->base*/ s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType)); if(!s->base) exit(0); /*分配空间失败*/ s->top = s->base; /*最开始,栈顶就是栈底*/ s->stacksize = STACK_INIT_SIZE; /*最大容量为STACK_INIT_SIZE */ } Push(sqStack *s ElemType e){ /*入栈操作*/ if(s->top - s->base >= s->stacksize){ /*栈满,追加空间*/ s->base = (ElemType *)realloc(s->base (s->stacksize STACKINCREMENT)*sizeof(ElemType)); if(!s->base) exit(0); /*存储分配失败*/ s->top = s->base s->stacksize; s->stacksize = s->stacksize STACKINCREMENT; /*设置栈的最大容量*/ } *(s->top) = e; /*放入数据*/ s->top ; } Pop(sqStack *s ElemType *e){ /*出栈操作*/ if(s->top == s->base) return; /*将栈顶元素弹出*/ *e = *--(s->top); /*修改栈顶指针*/ } int StackLen(sqStack s){ /*获得栈s的大小*/ return (s.top - s.base) ; } void translate(ElemType e sqStack *s){ ElemType c a; sqStack ss1; if(e>=97 && e<=122 ) printf("%c" e); else if(e == 'A') printf("%s" "sae"); else if(e == 'B') printf("%s" "tsaedsae"); else if(e == '(') { initStack(&ss1); /*初始化栈ss1,用来将括号里面的内容从栈中取出*/ Pop(&(*s) &c); /*注意*s相当于主函数中的s*/ a = c; /*保留括号后的第一个元素*/ Pop(&(*s) &c); while(c!=')'){ Push(&ss1 a); Push(&ss1 c); Pop(&(*s) &c); } Push(&ss1 a); /*并按语法规定排列后从右至左进入一个新栈ss1*/ while(StackLen(ss1)) /*翻译括号里的内容*/ { Pop(&ss1 &c); /*取出ss1中的元素c*/ translate(c &ss1); /*递归地调用函数 translate对元素c进行翻译*/ } } } main() { ElemType e; sqStack s1 s2; initStack(&s1); /*初始化栈s1*/ printf("Please input Devil language:\n"); scanf("%c" &e); while(e != '#') { if(e=='A' || e=='B' || (e>=97 && e<=122) || e=='('|| e==')') { /*输入的魔王语言合法*/ Push(&s1 e); /*入栈*/ } scanf("%c" &e); } initStack(&s2); /*初始化栈s2*/ while(StackLen(s1)) { Pop(&s1 &e); //printf("%c\n" e); Push(&s2 e); /*将魔王语言从右至左入栈s2*/ } printf("The mankind language is:\n"); /*z最终输入的魔王语言存放在栈s2 中,处理栈顶元素进行翻译*/ while(StackLen(s2)) { Pop(&s2 &e); translate(e &s2) ; } getche(); }

运行结果:

凡尘c语言(c语言翻译魔王的语言)(2)

运行结果

猜您喜欢: