c/c++语言开发共享C中的有限状态机

我试图在C中创建一个简单的有限状态机,我对如何开始感到困惑。 我尝试在网上看,但没有什么能真正为我解决这个问题。

我的目标是检查字符串是八进制,hex还是十进制。

要成为八进制,字符串必须以0开头,后跟数字0-7。 要成为hex,字符串必须以0x或OX开头,然后是(af,AF,0-9)

我创建州的尝试将是:

typedef enum { ERROR, OCTAL, HEX, DECIMAL } stringStates; 

现在,我将使用switch语句遍历整个字符串并在不同状态之间切换,直到我正确识别它属于哪个状态。

  while (current_Position<=end_String-1) { switch( "input something here") { case 0: //process string break; case 1: //process string break; case 2: //process string break; case 3: //process string break; default: break; } } 

这个概念对我来说仍然是一个新概念,我很难理解它的实现。 如果有人可以解决一些问题,那将非常感激。

    这是一个非常直截了当的问题,解决方案也非常简单。

    我有7个状态,即0到6,如图0所示,是初始状态。 3,4,5可能是最终状态,6是死亡状态。

    C中的有限状态机

    state 0 :初始状态,从这个状态我们只能遇到以下字符:

    0O1-9

    如果有任何其他字符然后出现错误,则无需进一步处理。

    state 1 :如果来自状态0的char为0,那么这是下一个状态和

    如果来自此状态的char为x,则字符串为hex(state = 4),无需进一步处理,因为任何char都可以跟随。

    如果来自这个状态的char是0-7然后string是八进制(state = 5)并且我们处理直到字符串的结尾以查看我们是否得到与0-7不同的任何字符,如果我们这样做那么错误是作为无效字符串和一旦我们得到它,就不需要进一步处理。

    状态2 :如果来自状态0的char是O然后这是下一个状态,并且从这个状态,如果下一个char是X,则string是hex(state = 4)并且不需要进一步处理,如果不是则那么错误就在那里。

    状态3 :如果来自状态0的char是1-9那么字符串是十进制数(state = 3)并且我们处理直到字符串的结尾以查看我们是否得到与0-9不同的任何字符,如果我们这样做那么错误就在那里作为无效字符串,一旦我们得到它就不需要进一步处理。

    状态4 :hex数

    状态5 :八进制数

    状态6 :错误意味着无效的字符串

    这是C代码。 我把字符串的长度设为9,只是为了简单而没有别的。

     #include  #include  int main() { char *a="066676777"; int state=0;int i=0; while(state!=6&&i<9) { switch(state) { case 0: if(a[i]=='0') state=1; else if(a[i]=='O') state=2; else if(a[i]>=49&&a[i]<=57) state=3; else {state=6;i=9;} break; case 1: if(a[i]=='x') { state=4;i=9; } else if(a[i]>=48&&a[i]<=55) { state=5; while(i<9) if(a[i]>=48&&a[i]<=55) ++i; else {state=6;i=9;} } else {state=6;i=9;} break; case 2: if(a[i]=='X') { state=4;i=9; } else {state=6;i=9;} break; case 3: while(i<9) if(a[i]>=48&&a[i]<=57) ++i; else {state=6;i=9;} break; default: printf("please select correct initial state"); break; } ++i; } if(state==3) printf("it is a decimal number"); else if(state==4) printf("it is a hexadecimal number"); else if(state==5) printf("it is a octal number"); else printf("error encountered as invalid string"); } 

      以上就是c/c++开发分享C中的有限状态机相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/562127.html

      (0)
      上一篇 2021年2月4日
      下一篇 2021年2月4日

      精彩推荐