有穷自动机的转换

 1 #include<stdio.h>
 2 main()
 3 {
 4     int i=0,j=0,x=0,y;
 5     int number=2;
 6     int count=0;
 7     char ch;
 8     char a[100][100];
 9     printf("请输入正规式以#结束 :
");
10     printf("^代表空
");
11     printf("|代表或
");
12     ch=getchar();
13     do
14     {
15        if(ch=='|')   
16         {
17             a[i][j]='';
18             j=0;
19             i++;
20             ch=getchar();
21             continue;
22         }
23         a[i][j]=ch;
24         j++;
25         ch=getchar();
26     }while(ch!='#');
27     a[i][j]='';
28     for(x=0;x<=i;x++)
29     {
30         y=0;
31         count=1;
32         while(a[x][y]!='')
33         {
34             if(a[x][y]=='.')
35             {
36 
37                if(a[x][y]=='.'&& count==1)     
38                {
39                  printf("f(0,%c)=%d
",a[x][y-1],number);
40                  if(a[x][y+2]=='')
41                   printf("f(%d,%c)=1
",number,a[x][y+1]);
42                  number++;
43                  count=2;
44                }
45 
46             else if(a[x][y]=='.'&& count!=1)
47                {
48 
49                    printf("f(%d,%c)=%d
",number-1,a[x][y-1],number);
50                    if(a[x][y+2]=='')
51                     printf("f(%d,%c)=1
",number,a[x][y+1]);
52                     number++;
53             }
54             }
55              if(a[x][y]=='*')
56              {
57                if(a[x][y]=='*'&& count==1)
58               {
59                    printf("f(0,^)=%d
",number);
60                    printf("f(%d,%c)=%d
",number,a[x][y-1],number);
61                    if(a[x][y+1]=='')
62                     printf("f(%d,^)=1
",number);
63                    else
64                     printf("f(%d,^)=%d
",number,number+1);
65                    number++;
66                    count=2;
67                }
68 
69              else if(a[x][y]=='*'&& count!=1)
70                {
71 
72                    printf("f(%d,%c)=%d
",number,a[x][y-1],number);
73                    if(a[x][y+1]=='')
74                     printf("f(%d,^)=1
",number);
75                    else
76                     printf("f(%d,^)=%d
",number,number+1);
77                    number++;
78                }
79             }
80             y++;
81         }
82     }
83 
84 }
原文地址:https://www.cnblogs.com/crx234/p/6188540.html