有限状态机的c实现.doc

有限状态机的c实现.doc

ID:59185511

大小:15.00 KB

页数:4页

时间:2020-09-10

有限状态机的c实现.doc_第1页
有限状态机的c实现.doc_第2页
有限状态机的c实现.doc_第3页
有限状态机的c实现.doc_第4页
资源描述:

《有限状态机的c实现.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、【转载2】有限状态机的c实现2007-05-1115:12網絡上可以搜索到很多有限狀態機的代碼和理論分析,這兒僅僅是做一個簡單的例子,僅供入門參考。这儿以四位密码校验作为状态机的例子,连续输入2479就可以通过密码测试。一个非常简单的例子,在实际的状态机实例中,状态转移表要更復雜一些,不過方式非常類似。在狀態查詢的地方可以做優化,同時對于輸入量也可以做有效性優化。具體代碼如下:viewplaincopytoclipboardprint?c.h   typedefenum{  STATE1=1,  STATE2,  STATE3,  STATE4,  STATE5,//passwo

2、rdpass  //...ADDhere  }STATE;   typedefenum{  INPUT1='2',  INPUT2='4',  INPUT3='7',  INPUT4='9',  }INPUT;   typedefstruct {  STATEcur_state;  INPUTinput;  STATEnext_state;  }STATE_TRANS; c.htypedefenum{STATE1=1,STATE2,STATE3,STATE4,STATE5,//passwordpass//...ADDhere}STATE;typedefenum{INPUT1='2

3、',INPUT2='4',INPUT3='7',INPUT4='9',}INPUT;typedefstruct{STATEcur_state;INPUTinput;STATEnext_state;}STATE_TRANS;c.c  #include     #include"c.h"   STATE_TRANSstate_trans_arry[]=   {  {STATE1,INPUT1,STATE2},  {STATE2,INPUT2,STATE3},  {STATE3,INPUT3,STATE4},  {STATE4,INPUT4,STATE5},  }; 

4、#defineSTATE_TRANS_CNT(sizeof(state_trans_arry)/sizeof(state_trans_arry[0]))   intmain()    {  inti;  charch;  STATEstate_machine=STATE1;   while(ch!='e')  {    ch=getchar();    if((ch>='0')&&(ch<='9'))//fordigitpasswordinputonly    {     for(i=0;i

5、e_trans_arry[i].input)&&(state_machine==state_trans_arry[i].cur_state))      {       state_machine=state_trans_arry[i].next_state;       continue;      }      elseif(i==(STATE_TRANS_CNT-1))//notransfermatch,resetstate      {       state_machine=STATE1;      }     }     if(state_machine==STATE

6、5)      printf("Passwordcorrect,statetransfermachinepass!");    }  }  return0;  } c.c#include   #include"c.h"STATE_TRANSstate_trans_arry[]={{STATE1,INPUT1,STATE2},{STATE2,INPUT2,STATE3},{STATE3,INPUT3,STATE4},{STATE4,INPUT4,STATE5},};#defineSTATE_TRANS_CNT(sizeof(state_trans_arry)/

7、sizeof(state_trans_arry[0]))intmain() {inti;charch;STATEstate_machine=STATE1;while(ch!='e'){  ch=getchar();  if((ch>='0')&&(ch<='9'))//fordigitpasswordinputonly  {   for(i=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。