zoukankan      html  css  js  c++  java
  • 1118有限自动机的构造与识别

    复制代码

      1 #include<string.h>
      2 #include<stdio.h>
      3 #include<stdlib.h>
      4 int main()
      5 {
      6     char p[30][30];
      7     char q[30][30];
      8     int line=0;
      9     int n;
     10     int i,j;
     11     int count=0;
     12     int k,t=0;
     13     int flag=0;
     14     int l,m=0;
     15     char VN[30]={'\0'};
     16     char VT[30]={'\0'};
     17     printf("请输入规则个数");
     18     scanf("%d",&n);
     19     line=n;
     20     for(i=0;i<30;i++)
     21     for(j=0;j<30;j++)
     22     {
     23         p[i][j]='\0';
     24         q[i][j]='\0';
     25     }
     26     printf("请输入文法:\n");
     27     for(i=0;i<line;i++)
     28     {
     29         scanf("%s",p[i]);
     30     }
     31     l=0;
     32     m=0;
     33     for(i=0;i<line;i++)
     34     {
     35         for(j=0;j<30&&(p[i][j]!='\0');j++)
     36         {
     37             if(p[i][j]<='z'&&p[i][j]>='a'||(p[i][j]<='9'&&p[i][j]>='0'))
     38             {
     39                 flag=0;
     40                 for(t=0;VN[t]!='\0';t++)
     41                 {
     42                     if(VN[t]==p[i][j])
     43                    {
     44                         flag=1;
     45                         break;
     46                    }
     47                 }
     48                 if(flag==0)
     49                 {
     50                     VN[l]=p[i][j];
     51                     l++;
     52                 }
     53             }
     54             if(p[i][j]<='Z'&&p[i][j]>='A')
     55             {
     56                 flag=0;
     57                 for(t=0;t<30&&(VT[t]!='\0');t++)
     58                 {
     59                     if(VT[t]==p[i][j])
     60                     {
     61                         flag=1;
     62                         break;
     63                     }
     64             }
     65             if(flag==0)
     66             {
     67                 VT[m]=p[i][j];
     68                 m++;
     69             }
     70         }
     71     }
     72 }
     73     count=0;
     74     k=0;
     75     for(i=0;i<line;i++)
     76     {
     77         for(j=4;j<30&&(p[i][j]!='\0');j++)
     78         {
     79             if((p[i][j]<='z'&&p[i][j]>='a')||(p[i][j]<='Z'&&p[i][j]>='A')||(p[i][j]<='9'&&p[i][j]>='0'))
     80             {
     81                 q[count][k]=p[i][j];
     82                 k++;
     83             }
     84             else
     85             {
     86                 count++;
     87                 k=0;
     88             }
     89         }
     90         count++;
     91         k=0;
     92     }
     93     flag=0;
     94     for(i=0;i<count;i++)
     95     {
     96         for(j=i+1;j<count;j++)
     97         {
     98             if(strcmp(q[i],q[j])==0)
     99             {
    100                 flag=1;
    101                 break;
    102             }
    103         }
    104     }
    105     if(flag==1)
    106     {
    107         printf("是非确定的有穷状态自动机,即NFA\n\n");
    108         printf("构造的有穷状态自动机为:\n");
    109         printf("NFA N=(K,E(总和的意思),M,{S},{Z})\n");
    110     }
    111     else
    112     {
    113         printf("是确定的有穷状态自动机,即DFA\n\n\n");
    114         printf("构造的有穷状态自动机为:\n");
    115         printf("DFA N=(K,E(总和的意思),M,{S},{Z})\n");
    116     }
    117     printf("其中,\nK={S");
    118     for(i=0;i<30&&(VT!='\0');i++)
    119     {
    120         printf(",%c",VT[i]);
    121     }
    122     printf("}\n");
    123     printf("E={");
    124     for(i=0;i<30&&(VN[i]!='\0');i++)
    125     {
    126         printf("%c ",VN[i]);
    127     }
    128     printf("}\n");
    129     //分离文法
    130     k=0;
    131     count=0;
    132     for(i=0;i<line;i++)
    133     {
    134         j=4;
    135         while(p[i][j]!='\0')
    136         {
    137             if(k<4)
    138             {
    139                 q[count][k]=p[i][k];
    140                 k++;
    141             }
    142             else
    143             {
    144                 if((p[i][j]<='z'&&p[i][j]>='a')||(p[i][j]<='Z'&&p[i][j]>='A')||(p[i][j]<='9'&&p[i][j]>='0'))
    145                 {
    146                     q[count][k]=p[i][j];
    147                     k++;
    148                     j++;
    149                 }
    150                 if(p[i][j]=='l')
    151                 {
    152                     count++;
    153                     k=0;
    154                     j++;
    155                 }
    156             }
    157         }
    158         count++;
    159         k=0;
    160     }
    161     printf("\n");
    162     //打印
    163     printf("M:\n");
    164     l=0;
    165     while(VN[l]!='\0')
    166     {
    167         printf("M(S,%c)={",VN[l]);
    168         for(i=0;i<30;i++)
    169         {
    170             for(j=4;j<30&&(q[i][j]!='\0');j++)
    171             {
    172                 if(VN[l]==q[i][j]&&(q[i][j+1]=='\0')&&(q[i][j-1]=='='))
    173                 printf("%c",q[i][0]);
    174             }
    175         }
    176         printf("}\t");
    177         l++;
    178     }
    179     printf("\n");
    180     l=0;
    181     k=0;
    182     while(VT[k]!='\0')
    183     {
    184         l=0;
    185         while(VN[l]!='\0')
    186         {
    187             printf("M(%c,%c)={",VT[k],VN[l]);
    188             for(i=0;i<30;i++)
    189             {
    190                 for(j=4;j<30&&(q[i][j]!='\0');j++)
    191                 {
    192                     if(VT[k]==q[i][j]&&VN[l]==q[i][j+1])
    193                     printf("%c",q[i][0]);
    194                 }
    195             }
    196             printf("}\t");
    197             l++;
    198         }
    199         k++;
    200         printf("\n");
    201     }
    202     system("pause");
    203 }
    204                                     
    复制代码
  • 相关阅读:
    Vsftpd 3.0.2 正式版发布
    Putdb WebBuilder 6.5 正式版本发布
    SoaBox 1.1.6 GA 发布,SOA 模拟环境
    pynag 0.4.6 发布,Nagios配置和插件管理
    Percona Playback 0.4,MySQL 负荷回放工具
    xombrero 1.3.1 发布,微型 Web 浏览器
    Hypertable 0.9.6.4 发布,分布式数据库
    libmemcached 1.0.11 发布
    CryptoHeaven 3.7 发布,安全邮件解决方案
    Android Activity生命周期
  • 原文地址:https://www.cnblogs.com/wenting/p/5040007.html
Copyright © 2011-2022 走看看