#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;
}
原文:http://www.cnblogs.com/yaohai/p/5040001.html