C语言程序构建用于正则表达式(a+aa*b)*的DFA
设计一个确定性有限自动机(DFA)来接受语言L = (a+aa*b)*。如果给定的字符串被DFA接受,则打印“字符串被接受”。否则,打印“字符串被拒绝”。
示例1
Input: Enter Input String aaaba Output: String Accepted.
说明 - 给定的字符串的形式为(a+aa*b)*,因为第一个字符是a,后面跟着a或ab。
示例2
Input: Enter Input String baabaab Output: String not Accepted.
给定正则表达式(a+aa*b)的DFA如下:

说明 -
如果第一个字符始终为a,则遍历剩余字符串并检查是否有任何字符为a或ab。
如果字符串中的第一个字符为'b',则打印“字符串被拒绝”。
如果在遍历过程中存在任何除a或b之外的字符,则打印“输入值错误”。
否则,打印“字符串被接受”。
程序
以下是构建用于正则表达式(a+aa*b)*的DFA的C语言程序 -
#include<stdio.h>
#include<conio.h>
#include<strings.h>
void main() {
int table[2][2],i,j,l,status=0,success;
char input[100];
printf("To implementing DFA of language (a+aa*b)*
Enter Input String:”);
table[0][0]=1;
table[0][1]=-1;
table[1][0]=1;
table[1][1]=0;
scanf("%s",input);
l=strlen(input);
for (i=0;i<l;i++) {
if(input[i]!='a'&&input[i]!='b') {
printf("The entered Value is wrong");
getch();
exit(0);
}
if(input[i]=='a')
status=table[status][0]; else
status=table[status][1];
if(status==-1) {
printf("String not Accepted");
break;
}
}
if(i==l)
printf("String Accepted");
getch();
}输出
执行上述程序时,会输出以下内容 -
Run 1: To implementing DFA of language (a+aa*b)* Enter Input String:cbsd The entered Value is wrong. Run 2: To implementing DFA of language (a+aa*b)* Enter Input String:abbababa String not Accepted. Run 3: To implementing DFA of language (a+aa*b)* Enter Input String:babbaab String not Accepted.
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP