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;
    }
    

      

  • 相关阅读:
    BZOJ1263: [SCOI2006]整数划分
    BZOJ2084: [Poi2010]Antisymmetry
    storage和memory
    快速理解区块链
    IPNS节点ID
    创建上传目录存储文件
    ipfs上传下载
    Solidity函数view,pure,constant的用法
    Truffle框架环境搭建
    以太坊常用钱包(测试币获取)
  • 原文地址:https://www.cnblogs.com/zou779596337/p/5037944.html
Copyright © 2011-2022 走看看