魔王语言的问题
把输入的魔王语言(大写字母)转换成规则对应的字符串,把人类语言(小写字符)变成对应中文结果无法输出!!!!!(运行情况见附件)
请高手相助!!!!!!!
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
未命名.rar
(5.75 KB)
//栈及其操作:
#define STACK_INIT_SIZE 100
#define STACK_INCREAMENT 10
typedef char SElemType ,QElemType;
//ADT顺序栈存储结构
typedef struct{
SElemType *top;
SElemType *base;
int StackSize ;
}sqStack;
//顺序栈接口函数定义
void InitStack(sqStack &s) //初始化一个顺序栈
{
s.base=(SElemType *)malloc(STACK_INIT_SIZE* sizeof(SElemType));
while(!s.base)
printf("内存分配失败!");
s.top=s.base;
s.StackSize=STACK_INIT_SIZE ;
}
int StackEmpty(sqStack s) //判断栈是否为空
{
if (s.base==s.top)
return 0;
else
return -1;
}
void Push(sqStack &s,SElemType e) //压入栈元素操作
{
if(s.top-s.base>STACK_INIT_SIZE )
{
s.base=(SElemType *)realloc(s.base,(s.StackSize +STACK_INCREAMENT)*sizeof( SElemType ));
if(!s.base)
printf("内存分配失败!");
s.top=s.base+s.StackSize;
s.StackSize+=STACK_INCREAMENT;
}
*s.top=e;
s.top++;
}
void Pop(sqStack &s,SElemType &e) //弹出栈元素操作
{
if (s.base==s.top)
printf("堆栈为空,不可进行弹栈操作!");
else
{s.top--;
e=*s.top;}
}
int Destroy(sqStack &s) //销毁栈
{
free(s.base);
(s).base=NULL;
(s).top=NULL;
return 0;
}
//魔王语言翻译函数
void BeelLang(char *BeelzebubLang,int i,sqStack &ChStack,sqStack &TransLang)
{
int j;
bool resever=true;
//魔王语言从左向右进栈
for( j=0;j<i;j++);
Push(ChStack,BeelzebubLang[j]);
SElemType e;
//按预先定义规则翻译魔王语言
while(!StackEmpty(ChStack))
{
Pop(ChStack,e);
switch(e)
{
case 'B':
{
Push(ChStack,'t');
Push(ChStack,'A');
Push(ChStack,'d');
Push(ChStack,'A');
break;
}
case 'A':
{
Push(ChStack,'s');
Push(ChStack,'a');
Push(ChStack,'e');
break;
}
case ')':
{
while(e!='('){
Pop(ChStack,e);
};
Push(ChStack,'!');
Push(ChStack,'好');
Push(ChStack,'你');
break;
}
case '(':
{
resever=false;
break;
}
default:
{
Push(TransLang,e);
break;
}
}
}
}
int main() //主函数main()
{
int i=0;char a;
int beellengh=0;
SElemType e;
sqStack CStack;
sqStack TranLang;
InitStack(CStack);
InitStack(TranLang);
char BeelzebubLang[100];
printf("语言解释规则如下:\n大写字母为魔王语言词汇;\t小写字母为人类语言。");
printf("\nB--->tAbA A--->sae essq--->你好!\n");
printf("指令书写原则:\n");
printf("1、由魔王语言和人类语言自由组和而成。\n");
printf("2、人类语言必须写在小括号内。\n");
printf("请输入魔王语言:\n");
while(a=getchar()!='\n')
{BeelzebubLang[i]=a;
i++;}
beellengh=i;
BeelLang(BeelzebubLang, beellengh,CStack,TranLang);
printf("翻译后的语句如下:\n");
while(!StackEmpty(CStack)){
Pop(CStack,e);
printf(" %c",e);
}
system("pause");
return 0;
}
[ 本帖最后由 softzhonghua 于 2009-10-27 20:38 编辑 ]