群星大合唱歌曲大全:下面是我用C++做的魔王语言能运行但不出结果谁能帮我改正啊

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/20 09:48:56
#include<iostream.h>
#include<string.h>
#include<stdio.h>
const int stacksize=1000;
class Seqstack
{
public:
char *dui(char x)
{ char * e;
switch(x)
{case 'A': e="Bdc"; case 'B': e="def"; case'C':e="anD";
case 'D': e="mkf"; case 'E': e="prsF"; case 'F': e="rs";
case 'G': e="kve";}
return e;}
void panduan(int n,char a[])
{int u=0;
for(int j=0;j<n;j++)

if(a[j]>=97&&a[j]<=122)
cout<<a[j];
else
if(a[j]>=65&&a[j]<=71)
{
char *t=dui(a[j]);
for(int k=0;k<strlen(t);k++)
if(t[k]>=97&&t[k]<=122)
cout<<t[k];
else
if(t[k]>=65&&t[k]<=71)
panduan(strlen(dui(t[k])),dui(t[k]));
}
else
{ if(a[j]==40)
{
int q=j;
for(int m=j+1;m<=n;m++)

if(m==stacksize-1) throw "上溢";
else
{if(a[m]==41)
u=m;
if (m-q==1) break;
else
if(m-q==2){ cout<<a[m-1];break;}
else
for(int ch=m-1;ch>=q+2;ch++)
if(a[ch]>=97&&a[ch]<=122) cout<<a[ch]<<a[q+1];
else
if(a[ch]>=65&&a[ch]<=71)
{
char *r=dui(a[ch]);
for(int p=0;p<strlen(r);p++)
cout<<r[p]; cout<<a[q+1];
}
}break;
}
break;
}
if(u>0&&u<n-1){char c[stacksize];char t[stacksize];
for(int d=0,f=u+1;d<n-u,f<=n;d++,f++)
c[d]=t[f];
panduan(n-u,c);
}
}

};
void main()
{char s[stacksize];
cout<<"请输入魔王语句:"<<endl;
for(;;)
{gets(s);
for(int i=0;i<strlen(s);i++)
if((s[i]>=65&&s[i]<=71)||(s[i]>=97&&s[i]<=122)||s[i]==40||s[i]==41)
continue;
else
{cout<<"输入超出范围,请从新输入!"<<endl;gets(s);} }
Seqstack g;
g.panduan(strlen(s),s);
}
问题描述:
有一个魔王总是使用自己的一种非常精练而抽象的语言讲话,没有人听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由下两种形式的规则由人的语言逐步抽象上去的:
(1) α→β1β2。。。。。βm;
(2) (θδ1δ2。。。。。δn)→θδnθδn -1。。。。θδ1θ
在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把他的话解释成人能听懂的语言;
基本要求:
用下述两条具体规则和上述规则形式(2)实现;设大写字母表示魔王语言的词汇;小写字母表示人的语言词汇;希腊字母表示 可以用大写字母或小写字母代换的变量;魔王语言可含人的词汇。
(1) B→tAdA;
(2) A→sae;
测试数据: B B
A A (倒序) A A
B(ehnxgz)B ----->解释成 t sae d sae ezegexenehe t sae d sae

若将小写字母与汉字建立下表所示的对应关系,则魔王说的话是:天上一只鹅地上一只鹅鹅追鹅赶鹅下鹅蛋鹅恨鹅天上一只鹅地上一只鹅。
t d s a e z g x n h
天 上 一 只 鹅 追 赶 下 蛋 恨

(我是用递归做的 没用到队列)

我运行了一下 你的程序,
看不出来你到底要做什么?