以前总觉得有限状态机和无限状态机非常的难理解,原来也就是自己一直没有一个直观的认识,今天看到一篇博客,总算对有限状态机入门了。一看就懂。
转载地址:http://blog.csdn.net/zqixiao_09/article/details/
简单知道其定义是没有用的,在C编程中我们改如何应用呢?
例题1:去除一个字符串中连续的空格,即 H__el___lo 变成 H_el_lo;
我们按照这种逻辑来写程序,看看是不是比较方便,代码如下:
#include
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; }
程序执行结果如下:
[cpp] view plain copy fs@ubuntu:~/qiang/char1$ gcc -o test test.c fs@ubuntu:~/qiang/char1$ ./test H el lo H el lo
效果很明显;
上面的例题还算简单吧,好像不用这个模型也可以是吧,那好,我们再来一题
#include
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; }
执行结果如下:
[cpp] view plain copy fs@ubuntu:~/qiang/char1$ ./char3 H el "wor ld" lo H el "wor ld" lo
/*this is program*/ #include
int main() { printf(
"Hello world!\n");
//Hello world! }
将这段程序中的单行注释去掉,继续画图:
编写程序如下:
#include
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中
可查看result.c中:
/*this is program*/ #include
int main() { printf(
"Hello world!\n");
//Hello world! }
单行注释被删除。
/*this is program*/ #include
int main() { printf(
"Hello world!\n");
//Hello world! }
测试代码如下:
#include
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
执行结果:
/*this is program*/ #include
int main() { printf(
"Hello world!\n");
//Hello world! }
大家可以比较画的图与所写程序,这种方法可以使我们编写程序时有个很好的思路!
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223322.html原文链接:https://javaforall.net
