请举一个C语言有限状态机的例子
时间: 2023-06-24 21:07:45 浏览: 26
以下是一个简单的C语言有限状态机的例子,它可以识别字符串"abc":
```C
#include <stdio.h>
enum State {
STATE_A,
STATE_B,
STATE_C,
STATE_ERROR
};
enum State transition(enum State current, char input) {
switch (current) {
case STATE_A:
if (input == 'a') {
return STATE_B;
} else {
return STATE_ERROR;
}
break;
case STATE_B:
if (input == 'b') {
return STATE_C;
} else {
return STATE_ERROR;
}
break;
case STATE_C:
if (input == 'c') {
return STATE_A;
} else {
return STATE_ERROR;
}
break;
case STATE_ERROR:
default:
return STATE_ERROR;
break;
}
}
int main() {
char str[] = "abc";
enum State current = STATE_A;
for (int i = 0; str[i] != '\0'; i++) {
current = transition(current, str[i]);
}
if (current == STATE_C) {
printf("String accepted\n");
} else {
printf("String rejected\n");
}
return 0;
}
```
该状态机有三个状态:STATE_A、STATE_B和STATE_C。它通过transition函数实现状态转换,根据当前状态和输入字符返回下一个状态。在main函数中,我们遍历输入字符串并调用transition函数进行状态转换。最后,如果最终状态为STATE_C,我们就输出"String accepted",否则输出"String rejected"。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)