有穷自动机转换

#include<stdio.h>
#define M 100
char str[M][M];
void Go(char ch);
main()
{
    char ch;
    printf("\n输入需要识别的字符(以#结束):");
    ch=getchar();
    Go(ch);
}
void Go(char ch)
{
    int i=0,j=0,k,s,n,sum;
    while(ch!='#')
    {
        while(ch=='|')
        {
            str[i][j]='\0';
            j=0;
            i++;
            ch=getchar();
        }
        str[i][j]=ch;
        j++;
        ch=getchar();
    }
    str[i][j]='\0';
    sum=2;
    for(k=0;k<=i;k++)
    {
        s=0;
        n=1;
        while(str[k][s]!='\0')
        {
            if(str[k][s]=='.'||str[k][s]=='*')
            {
                if(str[k][s]=='.'&&n==1)
                {
                    n++;
                    printf("\nf(0,%c)=%d\n",str[k][s-1],sum);
                    if(str[k][s+2]=='\0')
                        printf("\nf(%d,%c)=1\n",sum,str[k][s+1]);
                    sum=sum+1;
                }
                else if(str[k][s]=='.'&&n!=1)
                {
                    n++;
                    printf("\nf(%d,%c)=%d\n",sum-1,str[k][s-1],sum);
                    if(str[k][s+2]=='\0')
                        printf("\nf(%d,%c)=1\n",sum,str[k][s+1]);
                    sum=sum+1;
                }
                else if(str[k][s]=='*'&&n==1)
                {
                    n++;
                    printf("\nf(0,~)=%d\n",sum);
                    printf("\nf(%d,%c)=%d\n",sum,str[k][s-1],sum);
                    if(str[k][s+1]=='\0')
                        printf("\nf(%d,~)=1\n",sum);
                    else
                        printf("\nf(%d,~)=%d\n",sum,sum+1);
                    sum=sum+1;
                }
                else if(str[k][s]=='*'&&n!=1)
                {
                    n++;
                    printf("\nf(%d,%c)=%d\n",sum,str[k][s-1],sum);
                    if(str[k][s+1]=='\0')
                        printf("\nf(%d,~)=1\n",sum);
                    else
                        printf("\nf(%d,~)=%d\n",sum,sum+1);
                    sum=sum+1;
                }
            }
            s++;
        }
    }
}

 

转载于:https://www.cnblogs.com/ldg-01/p/6188773.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值