有穷自动机转换

#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++;
        }
    }
}

时间: 2024-10-10 14:21:26

有穷自动机转换的相关文章

有穷自动机的转换

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("请输入正规式以#结束 :\n"); 10 printf("^代表空\n"); 11 printf("|代表或\n"); 12 ch=getchar(); 13 do 14 { 15 if

利用子集构造法实现NFA到DFA的转换

概述 NFA非有穷自动机,即当前状态识别某个转换条件后到达的后继状态不唯一,这种自动机不便机械实现,而DFA是确定有限状态的自动机,它的状态转换的条件是确定的,且状态数目往往少于NFA,所以DFA能够比较方便的机械实现且识别能力方面也和NFA相当.本次实验采用子集构造法来实现不带空弧的由NFA到DFA的转换. 子集构造法的算法如下: 设NFA为M=(K,Σ,f,S0,Z),则构造相应的DFA  M′=(Q,Σ,f′,I0,F)①取I0=S0:②对于状态集Q中任一尚未标记的状态qi={Si1,Si

自己动手开发编译器(四)利用DFA转换表建立扫描器

上回我们介绍了两种有穷自动机模型——确定性有穷自动机DFA和非确定性有穷自动机,以及从正则表达式经过NFA最终转化为DFA的算法.有些同学表示还是难以理解NFA到底怎么转化为DFA.所以本篇开头时我想再多举一个例子,看看NFA转化为DFA之后到底是什么样.首先我们看下面的NFA,它是从一组词法分析所用的正则表达式转换而来的.这个NFA合并了IF.ID.NUM.error这四个单词的NFA.因此,它的四个接受状态分别代表遇到了四种不同的单词. 用上一篇学到的方法,我们需要求出一个DFA,它的每个状

WORD2010如何把全角字母和数字批量转换成半角

个人觉得全角字符看起来相当别扭,如果文档中存在大量全角形式的字母和数字,要如何把它们全部转化成半角的呢? 全角和半角 全角是指一个字符占用两个标准字符位置的状态.汉字字符和规定了全角的英文字符及国标GB2312-80中的图形符号和特殊字符都是全角字符. 半角的显示内码都是一个字节,英文字母.罗马数字.西方语言的符号都是半角形式. END 如何实现全角半角间的转换 全角字符占用更多字符,看起来也不够美观,如何将全角字符转换成半角的呢?这里我们可以利用word来实现.   不论是txt文档还是其他什

经济动能转换现万亿商机,腾讯云造人工智能数字商业

2017年6月,发改委印发<服务业创新发展大纲(2017-2025年)>(以下简称<大纲>),大纲指出我国正处于工业转型升级.新型城镇化推进和消费结构升级的大趋势中.预计到2025年,服务业增加值占GDP比重提高到60%. 根据国家统计局,2016年我国服务业增加值占GDP的比重达到51.6%.按2016年中国74万亿GDP估算,未来8年我国服务业增加值将有6.2万亿的增长空间.而数字经济和数字服务则是服务业增加值新增长的来源,对于企业来说则要把握历史机遇.加快推动数字商业创新发展

JSON与Javabean转换的几种形式

JSON格式的数据传递是最常用的方法之一,以下列出了常用的几种形态以及与Javabean之间的转换: String json1="{'name':'zhangsan','age':23,'interests':[{'interest':'篮球','colors':['绿色','黄色']},{'interest':'足球','colors':['红色','蓝色']}]}"; String json2="[{'name':'zhangsan'},{'name':'lisi'},{

myasql支持的数据类型以及函数转换

myasql支持的数据类型 1.数值类型 tinyint 1 小整数 smallint 2 大整数 mediumint 3 大整数 int 4 大整数 bigint 8 极大整数 如果插入 的较大较小 会自动改编为范围值 多余的数截取 float 4 double 8 decimal 默认是10 可以指定多少个整数和小数 2.字符串类型 char 0-255字节 定长字符串 varchar 0-255字节 变长字符串 tinyblob 0-255字节 不超过255个字符的二进制字符 tintex

zzuli oj 1134 字符串转换

题目链接: https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1134 Description 输入一个以回车结束的字符串,它由数字和字母组成,请过滤掉所有非数字字符,然后将数字字符串转换成十进制整数后乘以2输出. Input 输入一个以回车结束的字符串,长度不超过100,由数字和字母组成. Output 将转换后的整数乘以2输出,测试数据保证结果在int范围内. Sample Input sg987aa65t498 Sample Output 1

Date常用转换、比较

在项目开发过程中,遇到了一个需要把本年本月的充值超过1000元的用户都获取出来,但是我数据库时间存的是int类型.所以不知道where的条件语句怎么写,特此查了一下,再此总结一下,希望对需要的朋友能有所帮助. 总体思想是获取出来本月初和本月末的时间转化成int在where查询条件为之间的值. 引发出的问题:1) java获取当前系统时间 2)获取月初的月末的时间 3)时间格式转化成int 3. 时间转化用到的两个类 import java.util.Calendar; (日历) import j