//#include "first.h"
#include "string.h"
#include "iostream.h"
char G[5][7]=
{
"S->Ba",
"A->aS",
"A->BC",
"C->@",
"B->cAb"
//@ = NULL
};
char Vt[]=
{
"abc@"
};
char Vn[]=
{
"SABC"
};
char temp[30]="";
char t1=0;
char j =3;
///isVn////////////////////////////
bool isVn(char temp , char* vn)
{
char *vn1 =vn;
while(*vn)
{
if(temp==*vn++)
{
return true;
}
}
return false ;
}
///isVt////////////////////////////
bool isVt(char temp , char* vt)
{
char *vt1 = vt;
while(*vt1)
{
if(temp==*vt1++)
{
return true;
}
}
return false ;
}
///isNull//////////////////////////
bool isNull(char temp,const char g[5][7])
{
for(int i=0 ; i < 5 ; i ++)
{
if(temp == g[i][0])
{
for(int j =3 ; j < 7 ;j ++)
{
if (g[i][j] == '@')
{
return true;
}
}
}
}
return false;
}
///judge one char whether be in array?//////////////////////////////////////////
bool isinarray(char t, const char* te)
{
while(*te)
{
if(t == *te++)
return true;
}
return false;
}
///first collective//////////////////////////////////////////////////////////////
void zero()
{
memset(temp,0,30);
t1 =0;
j =3;
}
//save result;
char* first(char g[5][7],char x,char* vn,char* vt)
//"g[][]"on debug select given array;on release change to input;
{
/////////////////////////////
if(isVn(x,vn))
{
for(int i=0;i<5;i++)
{
if(g[i][0]==x)
{
///////////////vn one situation//////////////
if(isVt(g[i][j],vt) )
{
if(!isinarray(g[i][j],temp))
temp[t1++]=g[i][j];
}
///////////////vn two situation///////////////
else if(isVt(g[i] [j],vn))
{
if(isNull(g[i][j],g))
{
first(g,g[i][j],vn,vt);
if(j<7)
{
first(g,g[i][j+1],vn,vt);
}
}
else
{
first(g,g[i][j],vn,vt);
}
}
}
}
return temp;
}
else if(isVt(x,vt))
{
///////////////vt situation//////////////////
if(!isinarray(x,temp))
{
temp[t1++]=x;
}
return temp;
}
else return "error";
}
评论0