gpt4 book ai didi

c - C语言中的有限状态机

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:49 25 4
gpt4 key购买 nike

我正在尝试用 C 语言创建一个简单的有限状态机,但我对如何开始感到很困惑。我尝试在网上查找,但没有任何东西真正为我解决这个问题。

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

要成为八进制,字符串必须以 0 开头,后跟数字 0-7。要成为十六进制,字符串必须以 0x 或 OX 开头,后跟 (a-f, A-F, 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 是死亡状态。

enter image description here

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

0O1-9

如果有任何其他字符,则存在错误,无需进一步处理。

状态 1:如果来自状态 0 的字符是 0 那么这是下一个状态并且

如果来自此状态的字符是x,则该字符串是十六进制的(state=4)并且不需要进一步处理,因为任何字符都可以跟在后面。

如果此状态的字符为 0-7,则字符串为八进制(状态 = 5),我们处理直到字符串末尾,看看是否有任何不同于 0-7 的字符,如果有,则出现错误无效的字符串,一拿到就不需要进一步处理。

状态 2:如果来自状态 0 的字符是 O,那么这是下一个状态,如果从这个状态开始,如果下一个字符是 X,那么字符串是十六进制的(状态=4),不需要进一步处理,如果不是,则存在错误。

状态 3:如果来自状态 0 的字符是 1-9,则字符串是十进制数(状态=3),我们处理直到字符串末尾,看看是否得到任何不同于 0 的字符-9,如果我们这样做,那么错误就是无效的字符串,我们一得到它就不需要进一步处理。

状态4:十六进制数

状态5:八进制数

state 6:错误意思是无效字符串

这是 C 代码。为了简单起见,我将字符串的长度设为 9。

#include <stdio.h>
#include <stdlib.h>
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语言中的有限状态机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31100824/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com