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

📄 mowang.cpp

📁 用C++语言写的简单魔王语言源码
💻 CPP
字号:
#include<iostream>
#include<string>
using namespace std;


struct Tom
{
   char data[100];
   char * top;
   //char A;
   //int An;//记录A中字的长度
   //char B;
};

void InitTOM(Tom * a)//初始化栈
{
  int i(0);
  for(i=0;i<=99;i++)
  {
    a->data[i]='\0';
  }	
    /*a->A='\0';
	a->An =0;
	a->B ='\0';*/
    a->top = a->data;
}

void Push(char c, Tom * a)//压栈
{
  if(a->top == a->data +100)
	  return;
  *(a->top)=c;
  a->top++;
}

void Din(string &A,string &B,int &An,int &Bn)//记录A B的表示方法
{
  cout<<"请输入A的密文的长度:";
  cin>>An;
  cout<<"请输入A的密文内容:";
  cin>>A;
  cout<<"请输入B的密文长度:";
  cin>>Bn;
  cout<<"请输入B的密文内容:";
  cin>>B;
}

char Pop(Tom *a)
{
   char c;
   if(a->top==a->data)
	   return '\0';
   (a->top)--;
   c=*(a->top);
   *(a->top)='\0';
   return c;
}

string AtoB(string B,string A,int Bn)//当输入B的时候进入函数
{
	int i=0;
	int j=0;
	string str;	
	while(B[i]!='\0' && i<=Bn)
	{
	  if(B[i] == 'A')
	  {
	    str +=A;;
	  }
	  else
	  {
	    str +=B[i];
	  }
	  i++;
	}
	return str;
	
}
void Inputchar(char a,string &_n)
{
   _n=_n+a;
}
void OutPut(string s)
{
	int i=0;
	char a;
   while(s[i]!='\0')
   {
	  a=s[i];
      switch(a)
	  {
	  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;
	  }
	
	  i++;
   }
   

}

int main()
{
  string Lin;
  string A,B;
  int An=0,Bn=0;

  Din(A,B,An,Bn);//初始化魔王密文
 
  Tom *a =new Tom();
  InitTOM(a);
  
  string slen;
  int num=0;//记录总共几个字符
  cout<<"输入魔王语言:";
  cin>>slen;
  //char *p ;
  int i =0;
  char first;//记录第一个@
  bool f=false;
  int k=0;//记录是否是第一次压栈
  while(slen[i]!='\0')
  {
    
	if(slen[i]=='(')
	{
	   f=true;
	   k=1;
	   i++;
	   continue;
	}
	else if(slen[i]==')')
	{
	   f=false;
       for(int n=1;n<=k-1;n++)
	   {
		   if(n==k-1)
		   {
		     Inputchar(Pop(a),Lin);
		   }
		   else
		   {
	         Inputchar(first,Lin);
             Inputchar(Pop(a),Lin);
		   }
	   }
	   k=0;
	   first='\0';
	   i++;
	   continue;
	}
	
	if(f==true)
	{
	  if(k==1)
	  {
	     first=slen[i];
	  }
	    Push(slen[i],a);
	    k++;//即K-1就是栈中的元素个数
	}
	else
	{
	  if(slen[i]=='A')
	  {  
	     int y=0;
	     while(A[y]!='\0')
		 {
            Inputchar(slen[i],Lin);
		    y++;
		 }
	  }
	  else if(slen[i]=='B')
	  {
		  string str;
		  int g=0;
          str=AtoB(B,A,Bn);
		  while(str[g]!='\0')
		  {
		     Inputchar(str[g],Lin);
		     g++;
		  }
	  }
	  else
	  {
	     Inputchar(slen[i],Lin);
	  }
	}
	  num++;
      i++;  
  }
 
    OutPut(Lin);


   return 0;
}

⌨️ 快捷键说明

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