| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 740 人关注过本帖
标题:魔王语言的问题
只看楼主 加入收藏
softzhonghua
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2009-4-21
结帖率:80%
收藏
 问题点数:0 回复次数:0 
魔王语言的问题
把输入的魔王语言(大写字母)转换成规则对应的字符串,把人类语言(小写字符)变成对应中文

结果无法输出!!!!!(运行情况见附件)
请高手相助!!!!!!!






#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 编辑 ]
搜索更多相关主题的帖子: 语言 魔王 
2009-10-27 20:37
快速回复:魔王语言的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041111 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved