编译原理中有限自动机程序

小驴 2010-12-30 01:11:23

// B_1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"


#include<stdio.h>

int exch[4][2]={1,2,3,2,1,3,3,3};//这个是2维数组吗?具体是怎么样的
void judge(char *s)
{
int cur = 0, i = 0;
while(s[i])
{
if(s[i]-'a' > 1||s[i] < 'a')
break;
cur=exch[cur][ s[i++] - 'a'];//这一句怎么理解?
}
if(s[i] == 0 && cur == 3)
printf("%s √ Right!\n\n",s);
else printf("%s × Wrong!\n\n",s);
}

void main()
{
char str[100];
while(1)
{
printf("有限自动机,判断是否符合 (a|b)*(aa|bb)(a|b)*正则式\n");
printf("请输入字符串: ");
gets(str);
judge(str);
}
}


...全文
207 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Magallanes 2010-12-31
  • 打赏
  • 举报
回复
我了个去,难道是我们专业那个ACM的同学= =...一模一样的代码啊...
小驴 2010-12-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 magallanes 的回复:]

我了个去,难道是我们专业那个ACM的同学= =...一模一样的代码啊...
[/Quote]

这个就是我专业的ACM的那个同学的代码,我都看不懂,所以来提问的...看来我们是同学呀
小驴 2010-12-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 naturemickey 的回复:]

这个代码很牛啊!这么短就搞定了!
主要是那个状态定义得太好了。
[/Quote]
是啊,灰常厉害的
jianwei824 2010-12-30
  • 打赏
  • 举报
回复
cur=exch[cur][ s[i++] - 'a'];//这一句怎么理解?
就是把当前的字符与a做个比较,通过exch数组返回结果值
naturemickey 2010-12-30
  • 打赏
  • 举报
回复
这个代码很牛啊!这么短就搞定了!
主要是那个状态定义得太好了。
matrixcl 2010-12-30
  • 打赏
  • 举报
回复
int exch[4][2]={1,2,3,2,1,3,3,3};//这个是2维数组吗?具体是怎么样的
-------------------------
是。
int exch[4][2]=
{
{1,2},
{3,2},
{1,3},
{3,3}
};

如果后面的数字少于8个,会自动补0
例如
int exch[4][2]={1,2,3,2,1,3,3};
等价
int exch[4][2]=
{
{1,2},
{3,2},
{1,3},
{3,0}
};



cur=exch[cur][ s[i++] - 'a'];//这一句怎么理解?
---------------------------------
s[i++]应该能看懂吧,它是一个字符,例如'b'.
'b'-'a' = 1

结果就是
exch[cur][1]

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧