首页 > 代码库 > 关于自动机的相关问题
关于自动机的相关问题
根据自动机的原理,我参考了一些资料,做了一个简易的c程序实现。
#include<stdio.h> #include<string.h> #define MAX 20 int n=1; void tackBack(char sh[],int start,int End,int Begain,int Fin);//进行判定操作 int main(){ char sh[MAX]; int size; scanf("%s",sh); size=strlen(sh); tackBack(sh,0,size,0,1); return 0; } void tackBack(char sh[],int start,int End,int Begain,int Fin) { int i=start; while(!(sh[i] == ‘|‘) && i<End)//如果遇到||或者到了结束 i++; if(sh[i]==‘|‘){ tackBack(sh,start,i-1,Begain,Fin);//递归判定遇到|| tackBack(sh,i+1,End,Begain,Fin); } i=start; if(sh[i]>=‘a‘ && sh[i]<=‘z‘)//遇到的a.....z之间 { if(sh[i+1]==‘.‘)//遇到. { n++; printf("f<%d,%c>=%d\n",Begain,sh[i],n); } else if(sh[i+1]==‘*‘)//遇到* { n++; printf("f(%d,~)=%d\n",Begain,n); printf("f(%d,~)=%d\n",n,Fin); printf("f(%d,%c)=%d\n",n,sh[i],n); } } i+=2; while(i<End) { if(sh[i]>=‘a‘ && sh[i]<=‘z‘) { if(sh[i+1]==‘.‘) { printf("f<%d,%c>=%d\n",n,sh[i],n+1); n++; } else if(sh[i+1]==‘*‘) { n++; printf("f(%d,~)=%d\n",Begain,n); printf("f(%d,~)=%d\n",n,Fin); printf("f(%d,%c)=%d\n",n,sh[i],n); } } i++; } if(sh[i]>=‘a‘ && sh[i]<=‘z‘) { if(sh[i+1]==‘*‘) { printf("f(%d,%c)=%d\n",n,sh[i],Fin); } else { printf("f<%d,%c>=%d\n",n,sh[i],Fin); } } }
关于自动机的相关问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。