⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 魔王语言.cpp

📁 将魔王的语言抽象为人类的语言:魔王语言由以下两种规则由人的语言逐步抽象上去的:α-〉β1β2β3…βm ;θδ1δ2…-〉θδnθδn-1…θδ1 设大写字母表示魔王的语言
💻 CPP
字号:
#include<iostream.h>
#include<string.h>
#include<stack>
#include<queue>
void transfer(char *a)
{
	using std::stack;
	stack <char>s1;
	using std::queue;
	queue <char>q1,q2;//q1用于存放整个字符串。q2用于存放()里的字符串。
	int i=strlen(a);	
	int k=0;//用于标志是否是队列中的第一个元素。
	char s,t;
	for(int j=0;j<i;j++)
	{q1.push(a[j]);}
	cout<<"魔王的语言是:";
	while(!q1.empty())
	{
		s=q1.front();
		q1.pop();
		if(s=='B')
			cout<<"天上一只鹅地上一只鹅";
		else if(s=='A')
			cout<<"上一只鹅";
		else if(s=='(')
		{
			while(s!=')')
			{
				s=q1.front();
				q1.pop();
				if(s!=')')//(和)都不放进队列中。
					q2.push(s);
			}
			while(!q2.empty())//将q2里面的内容分情况的放进栈s1中。
			{
				if(k==0)//k初始值为0,用于标记是不是队列中的第一个元素。
				{
					t=q2.front();//获取()中的第一个元素
					s1.push(q2.front());//用栈是因为()里的元素打印出来都是从后向前的输出。不同的是每一个元素输出前需要先输出()的第一个元素。
					q2.pop();
					k++;
				}//在进栈时,除了队列的第一个直接进栈,后面的每一个进栈后都要再进入一个此队列最初的元素。
				else
				{
					s1.push(q2.front());
					q2.pop();
					s1.push(t);
				}
			}
			//将栈s1中的元素输出及为()的语言。
			while(!s1.empty())
			{
				char r=s1.top();
				s1.pop();
				if(r=='A')
					cout<<"上一只鹅";
				else if(r=='B')
					cout<<"天上一只鹅地上一只鹅";
				else 
				{
					switch(r)//不是B,A,()时的字母的输出。利用switch语句。
					{
					case 't':cout<<"天";break;
					case 'd':cout<<"地";break;
					case 's':cout<<"上";break;
					case 'a':cout<<"一只";break;
					case 'e':cout<<"鹅";break;
					case 'z':cout<<"追";break;
					case 'g':cout<<"赶";break;
					case 'x':cout<<"下";break;
					case 'n':cout<<"蛋";break;
					case 'h':cout<<"恨";break;
					}
				}
			}
		}
		else 
		{
			switch(s)//不是B,A,()时的字母的输出。利用switch语句。
					{
					case 't':cout<<"天";break;
					case 'd':cout<<"地";break;
					case 's':cout<<"上";break;
					case 'a':cout<<"一只";break;
					case 'e':cout<<"鹅";break;
					case 'z':cout<<"追";break;
					case 'g':cout<<"赶";break;
					case 'x':cout<<"下";break;
					case 'n':cout<<"蛋";break;
					case 'h':cout<<"恨";break;
					}
		}
	}
	cout<<endl;
}
void main()
{
	char a[100000];//不可以定义为char * a;这样在后面cin>>a ;回引起错误,因为它是野指针。
	cout<<"从这些字母中选择:t-天、d-地、s-上、a-一只、e-鹅、z-追、g-赶、x-下、n-蛋、h-恨、A-sae、B-tAdA、"<<endl;
	cout<<"请输入魔王的语言:"<<endl;
	cin>>a;
	transfer(a);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -