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.
廣告