📄 实验三3.cpp
字号:
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#define count 20
struct Node
{char data;
char *next;
Node(char item,char *add_on=NULL)
{data=item;next=add_on;}
};
//struct Node next1,next 2;
class List
{private:
char *head;
public:
List(){head=Null;}
void Append(char item)
{Node char*p;
Node char*newnode=new Node(item);
p=head;
if(head==Null){head=newnode;}
else
{do
{p=p->next;}while(p->next!=Null)
p->next=newnode;
}
}
}
struct NFA
{char *name;
int num;
char mark1;
List next1;
char mark2;
List next2;
}NFA[count];
struct DFA
{char name[6];
char mark1;
char next1[6];
char mark2;
char next2[6];
}DFA[count];
void Input(int i=0)
{int k,a;
char item;
do
{cin>>NFA[i].name>>NFA[i].num>>NFA[i].mark1>>NFA[i].next1.List();
cout<<"在该输入状态下得到的下一个状态个数:";
cin>>k;
cout<<"依次输入下一状态(每次只能输入一个):";
for(a=0;a<k;a++){cin>>item;NFA[i].next1.Append(char item);}
cin>>NFA[i].mark2>>NFA[i].next.List();
cout<<"在该输入状态下得到的下一个状态个数:";
cin>>k;
cout<<"依次输入下一状态(每次只能输入一个):";
for(a=0;a<k;a++){cin>>item;NFA[i].next2.Append(char item);}
i++;
}while(i<count)
}
void NFA_DFA(int a=0,int n=0)
{int m,t;
do{
m=a;
for(b=0;b<a;b++)
if(strcmp(DFA[a].next1,DFA[b].name)!=0)
for(t=0;t<strlen(DFA[a].next1);t++))
for(i=1;i<count;i++;)
if(strcmp(DFA[a].next1[t],NFA[i].name)==0)
{DFA[a++].name=DFA[a].next1;
DFA[a].mark1=NFA[0].mark1;
do{p=NFA[i].next1.head;
DFA[a].next1=string append(const char*p);
p=p->next;
}while(p!=Null);
}
for(b=0;b<a;b++)
if(strcmp(DFA[a].next2,DFA[b].name)!=0)
for(t=0;t<strlen(DFA[a].next2);t++))
for(i=1;i<count;i++;)
if(strcmp(DFA[a].next2[t],NFA[i].name)==0)
{DFA[a++].name=DFA[a].next2;
DFA[a].mark2=NFA[0].mark2;
do{p=NFA[i].next2.head;
DFA[a].next2=string append(const char*p);
p=p->next;
}while(p!=Null)
}
do{NFA_DFA(n++);}while(n<a);
}while(a==m);
}
void main()
{char m[10];
int count;
//cout<<"输入映象数目:";
//cin>>count;
Input(0);
for(i=0;i<count;i++)
{cout<<NFA[i].name<< NFA[i].num<< NFA[i].mark1;
p=NFA[i].next1.head;
do{cout<<p->data<<"->";
p=p->next;
}while(p!=Null);
cout<<NFA[i].mark2;
q=NFA[i].next2.head;
do{cout<<q->data<<"->";
q=q->next;
}while(q!=Null);
cout<<endl;
}
DFA[0].name=NFA[0].name;DFA[0].mark1=NFA[0].mark1;
do{p=NFA[0].next1.head;
DFA[0].next1=string append(const char*p);
p=p->next;
}while(p!=Null)
DFA[0].mark2=NFA[0].mark1;
do{q=NFA[a].next2.head;
DFA[0].next1=string append(const char*q);
q=q->next;
}while(q!=Null)
void NFA_DFA(0);
for(i=0;i<a;i++)
{cout<<DFA[i].name<< DFA[i].mark1<< DFA[i].next1<< DFA[i].mark2<<DFA[i].next...................................................................................................................................................................................
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -