Linux C 编程技巧--利用有限状态机模型编程
我们知道,一般编写程序时都要画出流程图,按照流程图结构来编程,如果编写一个比较繁琐,容易思维混乱的程序时,我们可以利用有限状态机模型画出一个状态转移图,这样便可以利用画出的逻辑图来编写程序,简洁且不易出错。
那什么是有限状态机是什么意思呢?百度百科上这样解释:
有限状态机,(英语:Finite-state machine, FSM),又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。
![](/assets/blank.gif)
- #include <stdio.h>
- int main(int argc, char *argv[])
- {
- char flag = 0;
- int ch;
- while((ch = getchar()) != EOF)
- {
- switch(flag)
- {
- case 0:
- if(ch == ' ')
- flag = 1;
- putchar(ch);
- break;
- case 1:
- if(ch == ' ')
- continue;
- flag = 0;
- putchar(ch);
- break;
- default:
- break;
- }
- }
- return 0;
- }
程序执行结果如下:
- fs@ubuntu:~/qiang/char1$ gcc -o test test.c
- fs@ubuntu:~/qiang/char1$ ./test
- H el lo
- H el lo
![](/assets/blank.gif)
- #include <stdio.h>
- int main(int argc, char *argv[])
- {
- char flag = 0;
- int ch;
- while((ch = getchar()) != EOF){
- switch(flag){
- case 0:
- if(ch == ' ')
- flag = 1;
- if(ch == '"')
- flag = 2;
- putchar(ch);
- break;
- case 1:
- if(ch != ' '){
- flag = 0;
- if(ch == '"')
- flag = 2;
- putchar(ch);
- }
- break;
- case 2:
- if(ch == '"')
- flag = 0;
- if(ch == '\"')
- ch = '"';
- putchar(ch);
- break;
- default:
- printf("error!\n");
- break;
- }
- }
- return 0;
- }
执行结果如下:
- fs@ubuntu:~/qiang/char1$ ./char3
- H el "wor ld" lo
- H el "wor ld" lo
- /*****This is a program!*****/
- #include <stdio.h>
- int main()
- {
- printf("Hello world!\n");//Hello world!
- }
将这段程序中的单行注释去掉,继续画图:
![](/assets/blank.gif)
- #include <stdio.h>
- int main(void)
- {
- char flag = 0;
- char ch;
- while((ch = getchar()) != EOF)
- {
- switch(flag)
- {
- case 0:
- if(ch == '/')
- flag = 1;
- else
- putchar(ch);
- break;
- case 1:
- if(ch == '/'){
- flag = 2;
- }
- else{
- putchar('/');
- putchar(ch);
- }
- break;
- case 2:
- if(ch == '\n')
- {
- flag = 0;
- putchar(ch);
- }
- break;
- default:
- break;
- }
- }
- }
执行命令:
- fs@ubuntu:~/qiang/char1$ ./quzhushi1 < test.c >result.c
注意命令中用到的重定向,将test.c文件重定向到quzhushi1 中,输出结果重定向到 result.c中
- /*****This is a program!*****/
- #include <stdio.h>
- int main()
- {
- printf("Hello world!\n");
- }
单行注释被删除。
- /*****This is a program!*****/
- #include <stdio.h>
- int main()
- {
- printf("Hello world!\n");//Hello world!
- }
好吧,继续画图,图上比较抽象,大家可以自己思考一下
![](/assets/blank.gif)
- #include <stdio.h>
- int main()
- {
- char ch;
- int flag = 0;
- while((ch = getchar()) != EOF)
- {
- switch(flag)
- {
- case 0:
- if(ch == '/')
- flag = 1;
- else
- putchar(ch);
- break;
- case 1:
- if(ch == '/')
- flag = 2;
- else if(ch == '*')
- flag = 3;
- else
- {
- flag = 0;
- putchar('/');
- putchar(ch);
- }
- break;
- case 2:
- if(ch == '\n')
- {
- putchar(ch);
- flag = 0;
- }
- break;
- case 3:
- if(ch == '*')
- flag = 4;
- break;
- case 4:
- if(ch == '/')
- flag = 0;
- else
- flag = 3;
- break;
- }
- }
- }
执行命令:
- fs@ubuntu:~/qiang/char1$ ./quzhushi < test.c >result.c
执行结果:
- #include <stdio.h>
- int main()
- {
- printf("Hello world!\n");
- }
大家可以比较画的图与所写程序,这种方法可以使我们编写程序时有个很好的思路!
Linux C 编程技巧--利用有限状态机模型编程相关推荐
- Matlab编程技巧:打开模型时加载数据字典
本文研究通过回调函数,在打开模型时加载数据字典到工作空间中. 文章目录 1 问题引入 2 简单例程 2.1 模型配置 2.2 数据字典表格 2.3 创建脚本 3 效果演示 4 总结 1 问题引入 在& ...
- Linux Shell常用技巧(十二) Shell编程
二十三. Bash Shell编程: 1. 读取用户变量: read命令是用于从终端或者文件中读取输入的内建命令,read命令读取整行输入,每行末尾的换行符不被读入.在read命令后面,如 ...
- Linux驱动小技巧 | 利用DRIVER_ATTR实现调用内核函数
1. 前言 很多朋友在调试驱动的时候,都会遇到这样一个场景:修改一个参数,然后调用某个内核中的函数. 比如将某个gpio的值拉高/拉低,修改某个寄存器的值等等. 如果每一个参数都通过字符设备的ioct ...
- python3实用编程技巧_6.python3实用编程技巧进阶(一)
1.1.如何在列表中根据条件筛选数据# 1.1.如何在列表中根据条件筛选数据 data = [-1, 2, 3, -4, 5] #筛选出data列表中大于等于零的数据 #第一种方法,不推荐 res1 ...
- python3实用编程技巧_9.python3实用编程技巧进阶(四)
4.1.如何读写csv数据 爬取豆瓣top250书籍import requests import json import csv from bs4 import BeautifulSoup books ...
- python编程技巧1002python编程技巧_总结Python编程中三条常用的技巧
在 python 代码中可以看到一些常见的 trick,在这里做一个简单的小结. json 字符串格式化 在开发 web 应用的时候经常会用到 json 字符串,但是一段比较长的 json 字符串是可 ...
- 单片机编程技巧_编程技巧
单片机编程技巧 From the desk of a brilliant weirdo #1: 从辉煌的怪胎#1的桌子上: Thank you for taking the time to check ...
- python编程第四版_Python编程 第4版 影印版 上下册
内容概要 本书是由Mark Lutz编写的<Python编程(影印版第4版)>.<Python编程(影印版第4版)>的内容包括: Python快速入门:搭建一个简单的例子,包括 ...
- 很全的linux网络编程技巧
注:作者王晓,本人认为总结得很好,故记之,绝无侵权之意. 本文转自:https://www.cnblogs.com/jfyl1573/p/6476607.html 看到好文章想留做自己学习,如有侵权, ...
最新文章
- sar sensor传感器的作用_传感器攻防战-惯导IMU
- php+mysql 大容量数据高效分页效果(弃用limit)
- 解决ssm项目表单数据提交到数据库乱码问题
- Linux_SELinux使用
- 小工匠聊架构- 提升性能的大杀器之缓存技术
- Google提出的新型激活函数:Swish
- Ie6下asp.net 中treeview自动随鼠标变小的修复
- postman安装路径_Newman进行postman脚本自动化
- 一年级下册数学计算机应用题,一年级数学下册期中检测试题
- C语言各种keyword
- c语言怎样编写图形,「分享」C语言如何编写图形界面
- spool.exe 出错 无法打印
- php 屏蔽微信分享,详解React Js中微信禁止复制链接分享禁止隐藏右上角菜单功能的案例分析...
- 代码管理学:通过配置文件限制依赖关系
- mybatis-plus代码自动生成器
- 老罗Android开发视频教程_基于JavaSE开发(适合Android初学者菜鸟级别的人)
- smart原则_写给中学生:用SMART原则制定寒假计划
- 微信小程序实现授权登录及退出
- 关于python的英文参考文献_参考文献英文版
- 使用python3开发趴小说的小工具
热门文章
- Oracle 11gR2 RAC恢复OCR和VOTE DISK
- linux下mono的安装与卸载
- C Primer+Plus(十七)高级数据表示 编程练习(二)
- eq相等,smarty 比较操作符!时间戳
- VMworld 2010旧金山胜利闭幕
- arduino消息服务器,在C(Arduino IDE)中将API链接消息解析为服务器(示例代码)
- 什么时候使用静态方法
- 实习生解雇_我们解雇了我们的顶尖人才。 我们做出的最佳决定。
- 27个机器学习图表翻译_使用机器学习的信息图表信息组织
- jsp导出数据时离开页面_您应该在要离开的公司开始使用数据