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.

更新於: 2021年6月14日

13K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告