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

📄 ex1.cpp

📁 这里是我在学校时所写的一些程序
💻 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 + -