有限自动机的构造与识别
2015-12-03 18:43
253 查看
#include "iostream.h"
#include "string.h"
#include "fstream.h"
#define NULL 0
class TransTile
{
public:
char current;
char next;
char input;
TransTile(char C,char I,char Ne){
current = C;
next = Ne;
input = I;
}
};
class DFA
{
public:
string States;
char startStates;
string finalStates;
string Alphabets;
vector <TransTile> Tile;
DFA(){
init();
}
void init()
{
cout << "输入有限状态集S:" << endl;
cin >> States;
cout << "输入字符集A:" << endl;
cin >> Alphabets;
cout << "输入状态转换式(格式为:状态-输入字符-下一状态,输入#结束):" << endl;
cout << "例如:1a1 \n 1a0 \n 2a1 \n #" << endl;
int h = 0;
//while (cin>>input){
// TransTile transval(input[0], input[1], input[2]);
// Tile.push_back(transval);
//}
while(true){
char input[4];
cin>>input;
if(strcmp(input,"#")==0)
break;
TransTile transval(input[0],input[1],input[2]);
Tile.push_back(transval);
}
cout << "输入初态:" << endl;
cin >> startStates;
cout << "输入终态:" << endl;
cin >> finalStates;
}
char move(char P,char I){
for (int i = 0; i < Tile.size(); i++){
if (Tile[i].current == P&&Tile[i].input == I){
return Tile[i].next;
}
}
return 'E';
}
void recognition(){
string str;
cout << "please input string:" << endl;
cin >> str;
int i = 0;
char current = startStates;
while (i < str.length()){
current = move(current, str[i]);
if (current == 'E'){
break;
}
i++;
}
if (finalStates.find(current) != finalStates.npos){
cout << "ERROR!" << endl;
}
else
{
cout << "ERROR!" << endl;
}
}
};
int main(){
DFA dfa;
bool tag;
while(1){
cout<<"continue to '1',else to '0':"<<endl;
cin>>tag;
if(tag){
dfa.recognition();
}else
break;
}
return 0;
}
#include "string.h"
#include "fstream.h"
#define NULL 0
class TransTile
{
public:
char current;
char next;
char input;
TransTile(char C,char I,char Ne){
current = C;
next = Ne;
input = I;
}
};
class DFA
{
public:
string States;
char startStates;
string finalStates;
string Alphabets;
vector <TransTile> Tile;
DFA(){
init();
}
void init()
{
cout << "输入有限状态集S:" << endl;
cin >> States;
cout << "输入字符集A:" << endl;
cin >> Alphabets;
cout << "输入状态转换式(格式为:状态-输入字符-下一状态,输入#结束):" << endl;
cout << "例如:1a1 \n 1a0 \n 2a1 \n #" << endl;
int h = 0;
//while (cin>>input){
// TransTile transval(input[0], input[1], input[2]);
// Tile.push_back(transval);
//}
while(true){
char input[4];
cin>>input;
if(strcmp(input,"#")==0)
break;
TransTile transval(input[0],input[1],input[2]);
Tile.push_back(transval);
}
cout << "输入初态:" << endl;
cin >> startStates;
cout << "输入终态:" << endl;
cin >> finalStates;
}
char move(char P,char I){
for (int i = 0; i < Tile.size(); i++){
if (Tile[i].current == P&&Tile[i].input == I){
return Tile[i].next;
}
}
return 'E';
}
void recognition(){
string str;
cout << "please input string:" << endl;
cin >> str;
int i = 0;
char current = startStates;
while (i < str.length()){
current = move(current, str[i]);
if (current == 'E'){
break;
}
i++;
}
if (finalStates.find(current) != finalStates.npos){
cout << "ERROR!" << endl;
}
else
{
cout << "ERROR!" << endl;
}
}
};
int main(){
DFA dfa;
bool tag;
while(1){
cout<<"continue to '1',else to '0':"<<endl;
cin>>tag;
if(tag){
dfa.recognition();
}else
break;
}
return 0;
}
相关文章推荐
- 【日记】十二月
- BZOJ 2982: combination( lucas )
- 论文词汇
- 循环语句:while;do while;for的用法
- 《隆重介绍 思源黑体:一款Pan-CJK 开源字体》
- html5学习笔记(5)
- Android Studio关于SVN的相关配置简介
- nyist79 拦截导弹
- ICMP协议、Ping、Traceroute
- (css+div)整个div居中
- 动画位置移动,动画的持续时间,动画延时,获取动画结束,添加新事件
- html5学习笔记(4)
- 12月3号 命名规范和运算符的使用
- 序列中找子序列的dp
- Android中利用shape定制控件边框
- Java中日期转换问题
- 12.3 html Div嵌套 li 无法居中解决,java公平锁监视锁
- Java中日期转换问题
- Discuz! X3.1论坛前台使用教程
- Java中日期转换问题