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之外的字符,则打印“输入值错误”。
否则,打印“字符串被接受”。
Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.
程序
以下是构建用于正则表达式(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.
广告