状态机基本概念以及使用状态机实现单词计数(C语言)

本文介绍了状态机的概念,它是一个有向图形,由状态、事件、动作和转换构成。通过一个简单的单词计数程序展示了状态机的应用,该程序根据状态转换规则统计字符串中的单词数量。状态机广泛应用于硬件设计、编译器和业务逻辑实现等方面。
摘要由CSDN通过智能技术生成

转载时请表明出处
作者联系方式:liuyuxin0829@qq.com

  在本周的培训内容中,接触到了“状态机”一词,这是什么意思?用来做什么?怎么做?以下记录了初识状态机的学习感悟,并使用状态机原理实现了简单的单词计数实例。

什么是状态机?

  根据查阅到的资料总结,状态机是一个有向图形,又可称状态转移图,由一组节点和一组相应的转移函数组成。

 举一个简单的例子:人有三个状态(节点):健康、感冒、康复中。触发的条件(转移函数)有淋雨、吃药、打针、休息。状态机如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kBdMSc9a-1603538195649)(E:\个人博客\1.状态机以及使用状态机实现单词计数(C语言)\images\finite_state_machine.jpg)]

  使用状态机编写程序时,常用到4个概念:

  1. 状态(State):一个状态机至少包括两个状态,如上面例子,有健康、感冒、康复中三个状态;
  2. 事件(Event):事件就是执行某个操作的触发条件或者口令。对于“淋雨”就是一个事件。
  3. 动作(Action):事件发生后要执行动作,动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当事件发生后,也可以不执行任何动作,直接迁移到新状态。编程时,一个Action一般对应一个函数。
  4. 转换(Transition):也就是从一个状态变化为另一个状态,例如从健康到感冒就是一个变换。

状态机用来做什么?

  状态机是一个对真实世界的抽象,而且是逻辑严谨的数学抽象,所以非常时候用在数学领域。可以应用到各个层面上,例如硬件设计、编译器设计、以及编程实现各种具体业务逻辑,如下面的使用状态机实现单词计数,从单词计数可扩展至解析xml文件等等。

  举一些生活中常见的例子:电灯的开关逻辑、自动贩卖机的售卖货物的逻辑、空调的控制逻辑等都可以抽象为状态机。

使用状态机实现单词计数

  问题描述:一个字符串由多个单词组成,这些单词由空格、逗号、句点、换行符等多种符号隔开,请写一个程序统计输入的字符串中有多少个单词。

构建状态机模型:

  1. 字符类型:英文字符、符号;

  2. 字符状态:起始状态、单词状态、符号状态、结束状态;

  3. 状态转换规则:

    (1)起始状态下读到非符号,进入单词状态;

    (2)单词状态下读到符号,进入符号状态;

    (3)符号状态下读到非符号,进入单词状态;

    (4)在起始状态、单词状态、符号状态下读到‘ \0’,进入结束状态。

  4. 动作:每次进入单词状态,单词计数加1。

实现代码如下:

/**
 * 判断字符是否为符号。
 */
#
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值