📄 ex1.cpp
字号:
#include<iostream.h>
#include<String.h>
const int MAXNUM=100;
int reln=MAXNUM;
char rel[MAXNUM][MAXNUM];
char sta[MAXNUM][MAXNUM];
char *combine(char a[],char b[],char temp[])
{
int join=1,n=(int)strlen(b);
for(int i=0;i<n;i++)
temp[i]=b[i];
temp[n]='\0';
for(i=0;i<(int)strlen(a);i++){
n=(int)strlen(temp);
join=1;
for(int j=0;j<(int)strlen(temp);j++){
if(a[i]==temp[j])
join=0;
}
if(join==1){
temp[n++]=a[i];
temp[n]='\0';
}
}
return temp;
}
void mult(char s[],char r[][MAXNUM])
{
char t[MAXNUM];
int a=-1,b=-1,c=-1,d=-1;
for(int i=0;i<(int)strlen(s);i++){
for(int j=0;j<reln;j++){
if(s[i]==r[j][0]&&r[j][2]=='a'){
if(a==-1)
a=(int)r[j][4]-48;
else{
if(a==(int)r[j][4]-48)
a=(int)r[j][4]-48;
else
b=(int)r[j][4]-48;
}
}
if(s[i]==r[j][0]&&r[j][2]=='b'){
if(c==-1)
c=(int)r[j][4]-48;
else{
if(c==(int)r[j][4]-48)
c=(int)r[j][4]-48;
else
d=(int)r[j][4]-48;
}
}
}
}
if(a!=-1&&b!=-1){
cout<<"{";
for(int i=0;i<(int)strlen(s);i++)
cout<<s[i]<<",";
cout<<"}--a-->{";
for(int j=0;j<(int)strlen(combine(sta[a],sta[b],t));j++)
cout<<combine(sta[a],sta[b],t)[j]<<",";
cout<<"}\n";
}
else if(a!=-1&&b==-1){
cout<<"{";
for(int i=0;i<(int)strlen(s);i++)
cout<<s[i]<<",";
cout<<"}--a-->{";
for(int j=0;j<(int)strlen(combine(sta[a],sta[a],t));j++)
cout<<combine(sta[a],sta[a],t)[j]<<",";
cout<<"}\n";
}
else{
cout<<"{";
for(int i=0;i<(int)strlen(s);i++)
cout<<s[i]<<",";
cout<<"}--a-->"<<"@\n@--a-->@\n@--b-->@\n";
}
if(c!=-1&&d!=-1){
cout<<"{";
for(int i=0;i<(int)strlen(s);i++)
cout<<s[i]<<",";
cout<<"}--b-->{";
for(int j=0;j<(int)strlen(combine(sta[c],sta[d],t));j++)
cout<<combine(sta[c],sta[d],t)[j]<<",";
cout<<"}\n";
}
else if(c!=-1&&d==-1){
cout<<"{";
for(int i=0;i<(int)strlen(s);i++)
cout<<s[i]<<",";
cout<<"}--b-->{";
for(int j=0;j<(int)strlen(combine(sta[c],sta[c],t));j++)
cout<<combine(sta[c],sta[c],t)[j]<<",";
cout<<"}\n";
}
else{
cout<<"{";
for(int i=0;i<(int)strlen(s);i++)
cout<<s[i]<<",";
cout<<"}--b-->"<<"@\n@--a-->@\n@--b-->@\n";
}
if(a!=-1&&b!=-1){
if(strlen(s)!=strlen(combine(sta[a],sta[b],t)))
mult(combine(sta[a],sta[b],t),r);
else return;
}
else if(a!=-1&&b==-1){
if(strlen(s)!=strlen(combine(sta[a],sta[a],t)))
mult(combine(sta[a],sta[a],t),r);
else return;
}
else return;
if(c!=-1&&d!=-1){
if(strlen(s)!=strlen(combine(sta[c],sta[d],t)))
mult(combine(sta[c],sta[d],t),r);
else return;
}
else if(c!=-1&&d==-1){
if(strlen(s)!=strlen(combine(sta[c],sta[c],t)))
mult(combine(sta[c],sta[c],t),r);
else return;
}
else return;
}
void main()
{
int n=MAXNUM;
char sin[MAXNUM];
cout<<"请以状态编号形式输入各状态,如“012345”,其中0表示状态0,即q0\n";
cin>>sin;
n=(int)strlen(sin);
cout<<"请输入转移关系数:";
cin>>reln;
cout<<"请以以下形式输入各转移关系:如“0,a,2”表示状态0读入a到达状态2\n";
for(int i=0;i<reln;i++)
{
cin>>rel[i];
}
int m=1,t=1;
for(i=0;i<n;i++){
sta[i][0]=sin[i];
sta[i][1]='\0';
}
for(i=0;i<n;i++){
m=1;
for(int j=0;j<(int)strlen(sta[i]);j++)
for(int p=0;p<reln;p++){
if(sta[i][j]==rel[p][0]&&rel[p][2]=='e'){
for(int q=0;q<(int)strlen(sta[i]);q++){
if(rel[p][4]==sta[i][q]){
t=0;
}
}
if(t!=0){
sta[i][m++]=rel[p][4];
sta[i][m]='\0';
}
}
}
}
for(i=0;i<n;i++){
cout<<"E("<<i<<")={";
for(int j=0;j<(int)strlen(sta[i]);j++)
cout<<sta[i][j]<<",";
cout<<"}\n";
}
cout<<"输出相应确定型自动机转移关系如下:\n";
mult(sta[0],rel);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -