zoukankan      html  css  js  c++  java
  • 1118实验三有限自动机的构造与识别

    #include<stdio.h>
    #include<iostream>
    #include<vector>
    #include<string>
    using namespace std;
    
    
    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 
     1a0 
     2a1 
     #" << endl;
    		int h = 0;
    		}
    		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 << "输入需要识别的字符串:" << 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 << "该自动机识别该字符串!" << endl;
    		}
    		else
    		{
    			cout << "该自动机不能识别该字符串!" << endl;
    		}
    	}
    };
    
    int main(){
    	DFA dfa;	
    	bool tag;
    
    	while(1){
    	cout<<"你想要继续吗?是请输入1,否输入0:"<<endl;
    		cin>>tag;
    	if(tag){
    			dfa.recognition();
    		}else
    			break;
    
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    __init__.py文件的作用
    is is not == !=之间的区别
    使用七牛上传头像
    flask的request的用法
    Mac各个文件夹表示的意思
    sqlalchemy的基本的使用
    将Cygwin Emacs设为Windows explorer默认打开程序
    使用Stardict命令行版本sdcv
    坚持使用GNU/Linux
    在Windows上创建同样的Linux操作环境
  • 原文地址:https://www.cnblogs.com/zou779596337/p/5037944.html
Copyright © 2011-2022 走看看