Chinaunix首页 | 论坛 | 博客
  • 博客访问: 675969
  • 博文数量: 156
  • 博客积分: 3402
  • 博客等级: 中校
  • 技术积分: 1639
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-13 14:06
个人简介

业余编程爱好者

文章分类

全部博文(156)

文章存档

2014年(1)

2013年(13)

2012年(46)

2011年(38)

2010年(58)

分类: LINUX

2012-07-10 14:21:41

    没有学过计算机课程的我,一直都是在小打小闹。目前我找来了“虎书”,系统的学习下编译原理。从网上买的打印本,质量还不错,这本书已经绝版了。这两天正在学有限自动机原理,心想可以把cforth的数字字符串处理模块写得正规一点。以下是我画的int型数字的有限自动机,欢迎大家指正:



以下是用C语言写的实验代码:判断输入的字符串是否为INT型整数,是返回1,否返回0。

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. char edges[ ][12] = {    /* 1 2 3 4 5 6 7 8 9 0 - */
  3.     /* state 0 */    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  4.     /* state 1 */    { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3 },
  5.     /* state 2 */    { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0 },
  6.     /* state 3 */    { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0 },
  7.     /* state 4 */    { 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0 }
  8. };

  9. int main()
  10. {
  11.     char str[50];
  12.     while(1) {
  13.         gets(str);
  14.         printf("%d\n", is_num(str));
  15.     }
  16.     return 0;
  17. }

  18. int is_num( char* str )
  19. {
  20.     int state, i;
  21.     for(state=1; *str != '\0'; str++) {
  22.         
  23.         switch( *str ) {
  24.             case '1': i = 1; break;
  25.             case '2': i = 2; break;
  26.             case '3': i = 3; break;
  27.             case '4': i = 4; break;
  28.             case '5': i = 5; break;
  29.             case '6': i = 6; break;
  30.             case '7': i = 7; break;
  31.             case '8': i = 8; break;
  32.             case '9': i = 9; break;
  33.             case '0': i = 10; break;
  34.             case '-': i = 11; break;
  35.             default : return 0;
  36.         }
  37.         
  38.         state = edges[state][i];
  39.     }
  40.     
  41.     if(state == 2 || state == 4)
  42.         return 1;
  43.     return 0;
  44. }

阅读(1178) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~