模式匹配

Rust模式匹配 模式匹配是从函数式编程语言(例如:Haskell,Lisp)吸收而来的,用于为复杂的类型系统提供一个轻松的解构能力。rust使用match来提供模式匹配的功能。mathc类似于其它编程语言中的switch-case,但是远比switch-case强大。match的通用模式如下所示。该形式清晰的说明了何为模式,何为模式匹配:将模式与 target 进行匹配,即为模式匹配,而模式匹配不仅仅局限于 match,还有if let。 阅读详情

利用改进的KMP算法,输出s1在s2中第一次出现的位置。假设串长不超过80。输入数据是两个字符串,输出数据是s1的NEXTVAL数组的值和s1在s2中第一次出现的位置。找不到输出0。

输入格式:
输入共2行,分别是s1和s2。

输出格式:
输出也是两行,第一行输出NEXT数组的值,第二行是一个表示位置的整数。输出格式为%3d。

输入样例:
aaaaab
aaaabaaaaaaaaab
输出样例:
0 0 0 0 0 5
10

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int next1[1000];
//next1[j] = k,表示当T[i] != P[j]时,j指针的下一个位置。
//求字串在主串中第一次出现的位置
void get_next1val(char T[1000],int next1[],int len)
{
    int i=1,j=0;
    next1[1]=0;
    while(i<len)
    {
        if(j==0||T[i-1]==T[j-1])
        {
            ++i;
            ++j;
            if(T[i-1]!=T[j-1])
                next1[i]=j;
            else
                next1[i]=next1[j];

        }
        else
            j=next1[j];
    }

}
int main()
{
    char s1[1000],s2[1000];
    gets(s1);
    gets(s2);

    int len1=strlen(s1);
    int len2=strlen(s2);
    
    get_next1val(s1,next1,len1);
    int i,j;
    for(i=1; i<=len1; i++)
        printf("%3d",next1[i]);
    printf("\n");

    i=0,j=0;
        while(i<len1&&j<len2)
        {
            if(s1[i]==s2[j])
            {
                i++;
                j++;
            }
            else
            {
                j=j-i+1;
                i=0;
            }
        }
        if(i==len1)
        {
            printf("%3d",j-i+1);
//            flag=1;
        }
        else
            printf("  0");

//    if(flag==0)
//        printf("  0");

    return 0;




}

java 字符串模式匹配_算法之字符串模式匹配 导读字符串模式匹配是常见的算法之一,在实际生活中有较高的使用频率。本文详细介绍两种最常见的字符串模式匹配算法:朴素模式匹配KMP模式匹配字符串模式匹配,也称子串的定位操作,通俗的说就是在一个主串中判断是否存在给定的子串(又称模式串),若存在,则返回匹配成功的索引。如:主串:zhuanlanzhihu子串:zhihu主串中包含子串"zhihu",说明匹配成功,且返回的索引为:8注:本文所有出现的字符... 阅读详情

相关推荐

VS2019+EasyX图形库实战:手把手教你用C语言打造消消乐小游戏(附完整源码)

本文详细介绍了如何使用VS2019和EasyX图形库从零开始构建一个C语言消消乐小游戏。通过环境配置、数据结构设计、界面绘制、交互实现到游戏逻辑完善的完整流程,帮助开发者掌握图形编程和游戏开发的核心技巧,并附有完整源码供参考。

bush的博客 186

字符串模式匹配

4字符串模式匹配(5分) 给定主串s和模式串p,编写程序输出p在s中出现的首位置,若p不在s中则输出-1。字符串下标从0开始。 输入格式: 输入为2行,第1行主串s,第2行为模式串p。主串和模式串长度不超过100000。 输出格式: 输出为2行,第1行为若干整数,表示模式串p的失败函数值,每个整数后一个空格;第2行为一个整数,表示p在s中出现的首位置,若p不在s中则输出-1。 输入样例: 在这里给出一组输入。例如: qwerabcabhlk abcab 输出样例: 在这里给...

qq_24624539的博客 2489

RedPitaya火龙果板基础操作

火龙果板基础操作一级目录二级目录三级目录 一级目录 二级目录 三级目录

qq_41523340的博客 9718

串的模式匹配算法

最近在学数据结构中的串,现在来写一写我对串的不同模式匹配算法的理解: 声明:首先需要注意这里面的串的存储结构,它并不是普通的像C语言中的字符串一样在每个串末尾有一个结尾标志‘/0’,然而这里是通过在数组下标为0的元素赋值为整个串的有效长度值,例如字符串friend,储存它的数组最后一个元素T[6]中存储字符’d’;第一个元素T[0]存储有效长度6;第一个存储字符的元素T[1]存储的字符’f’。然后...

qq_43771635的博客 3242

Lede(OpenWrt)安装和双宽带叠加

LEDE是一个专为路由器和嵌入式设备设计的自由和开源的操作系统。LEDE是OpenWRT项目的一个分支项目。LEDE操作系统包括许多路由器有用的功能,如网络地址转换、防火墙、端口转发、DHCP服务器等。

我的博客 6441

Microchip Studio 7.0 从零开始:下载、安装到首个AVR工程实战

本文为AVR单片机开发新手提供了Microchip Studio 7.0的完整入门指南。从官方下载、避坑安装,到创建首个GCC C工程、编写LED闪烁代码,再到项目配置、仿真调试与程序烧录,手把手带你完成从零到一的实战过程,是掌握AVR开发环境的必备教程。

weixin_29200741的博客 519

KMP模式匹配算法

KMP模式匹配算法的分析介绍

daye_的博客 3348

别再写前端了!用Gradio 3.x + HuggingFace Spaces,5分钟把你的Python算法变成网页应用

本文介绍如何利用Gradio 3.x和HuggingFace Spaces快速将Python算法转化为网页应用,无需前端开发经验。通过5行代码和简单的Git命令,即可实现专业级Web界面部署,大幅提升算法展示效率。特别适合算法工程师和数据科学家快速分享模型成果。

weixin_33443333的博客 331

【数据结构】串的模式匹配:简单的模式匹配算法,KMP算法

简单模式匹配算法;KMP算法;求next数组

小人物,大梦想! 3344

动力学约束下的运动规划算法——状态栅格规划器(State Lattice Planner)

A*、RRT等算法建立的用于路径搜索的图模型是不考虑机器人的动力学约束的,其构建的图模型的两个相邻节点之间的路径可能是不可行的,或者很难被机器人跟踪的,现在我们想要使得图中相邻两个节点间的连接是一种满足动力学约束的可行的连接,那么如何构建一个这样的图呢? 构建这样的图通常有两种方法:第一种是基于控制空间的采样(正向方法)

慕羽★的博客 3104

PLC批量读写优化:C# Modbus TCP多寄存器批量操作(效率提升50%)

效率提升:请求次数减少90%以上,通信耗时降低50%-95%;资源节约:减少网络带宽占用和PLC/上位机CPU负载;稳定性提升:更少的请求意味着更少的通信异常;适配高频采集:满足工业现场100ms/次的高频率数据采集需求。工业落地时需注意:批量操作的核心是地址连续化规划,提前与PLC工程师协同规划寄存器地址,是优化的前提;同时需配合重试、校验机制,确保批量操作的可靠性。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1258

串的模式匹配

字串(模式串)的定位操作 在主串(也称做目标串)S中,从位置start开始查找是否存在子串(也称做模式串)T,如果在主串S中查找到一个与模式串T相同的子串,则称查找成功;如在主串S中未找到一个与模式串T相同的子串,则称查找失败。当模式匹配成功时,函数返回模式串T的第一个字符在主串S中的位置;当模式匹配失败时,函数返回-1 朴素的模式匹配算法(Brute-Force算法) BF算法的主要思想是...

世俗的博客 7292

【银河麒麟V10】【桌面】【服务器】系统启动问题

1、如果之前运行好好的,重启后系统报错,一般80%是因为fstab的问题,回想下之前有没有添加过外接存储,修改过/etc/fstab,如果是的话一般是因为存储异常(比如网络存储无法连接,本地存储路径变化)导致系统开机自检失败,导致无法正常启动; 处理方式:进入单用户(单用户进入的几种方式上面有专门文章介绍),修改/etc/fstab,将新增的内容暂时注释掉,然后重启系统,能正常进入系统后再分析失败原因。 ...

桂安俊@KylinOS 3万+

模式匹配算法

下面分别介绍:朴素模式匹配算法 和 改进模式匹配算法(KMP) 朴素模式匹配算法思想: 从目标S中的第一个字符开始和模式T中的的第一个比较(用 i 和 j 分别指示S串和T串中正在比较字符的位置),若相等,则继续逐个比较后续字符,否则, 从S 的第二字符重新开始匹配,直到匹配完成。 核心就是 i = i - j +1 ; //其中 j 就是已经匹配字符的个数 。+1 带表下一次匹配的位置。 ///朴素匹配 #include<iostream> #include<cstdio...

weixin_43154720的博客 1563

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

朴素的模式匹配算法和快速模式匹配算法(KMP)

朴素的模式匹配算法和快速模式匹配算法(KMP) 字符串的模式匹配 寻找字符串p在字符串t中首次出现的起始位置称为字符串的模式匹配,其中称p为模式(Pattern),t为正文(Text) 1、朴素的模式匹配算法 基本思想:用p中的每个字符去与t中的字符一一比较。比较成功返回1;比较失败,正文t的下标向后移动一位,直到比较成功。如若t的剩余字符的长度小于p的长度还未匹配成功,则返回-1。 n代表正...

qq_40112791的博客 1080

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Scala模式匹配

(1)语法:case class Person (name: String, age: Int) //举例(2)说明样例类仍然是类,和普通类相比,只是其自动生成了伴生对象,并且伴生对象中自动提供了一些常用的方法,如 apply、unapply、toString、equals、hashCode 和 copy。样例类是为模式匹配而优化的类,因为其默认提供了 unapply 方法,因此,样例类可以直接使用模式匹配,而无需自己实现 unapply 方法。

2401_83329402的博客 1128

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Lua模式匹配

    与其他几种脚本语言不通,Lua语言既没有使用POSIX正则表达式,也没有使用Perl正则表达式来进行模式匹配。之所以这样做的主要原因在于大小问题:一个典型的POSIX正则表达式实现需要超过4000行代码,这比所有Lua语言标准库总大小的一半还大。相比之下,Lua语言模式匹配的实现代码只有不到600行。尽管Lua语言的欧式匹配做不到完整POSIX实现的所有功能,但是Lua语言的模式匹配仍然非...

2211

Scala的模式匹配详解

模式匹配是Scala中非常有特色,非常强大的一种功能。模式匹配,其实类似于Java中的swich case语法,即对一个值进行条件判断,然后针对不同的条件,进行不同的处理。 但是Scala的模式匹配的功能比Java的swich case语法的功能要强大地多,Java的swich case语法只能对值进行匹配。但是Scala的模式匹配除了可以对值进行匹配之外,还可以对类型进行匹配、对Array和List的元素情况进行匹配、对case class进行匹配、甚至对有值或没值(Option)进行匹配。 而且对于Sp

weixin_49165958的博客 1525

Scala模式匹配详解

模式匹配语法中,采用 match 关键字声明,每个分支采用 case 关键字进行声明,当需要匹配时,会从第一个 case 分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹 配不成功,继续执行下一个分支进行判断。如果所有 case 都不匹配,那么会执行 case _分支, 类似于 Java 中 default 语句。

楚生辉的博客 1万+

详解 Scala 的模式匹配

/ 定义一个类// 定义伴生对象// 实现 apply 方法用于创建对象// 实现 unapply 方法用于拆解对象属性def unapply(student: Student): Option[(String, Int)] = { // Option 防止空指针None} else {// 创建对象// 对象模式匹配val result = student match { // 对象匹配的是各属性是否相同而不是地址。

weixin_44480009的博客 1247

【Scala】match——模式匹配总结

Scala 中的模式匹配类似于 Java 中的 switch 语法 模式匹配语法中,采用 match 关键字声明,每个分支采用 case 关键字进行声明,当需要匹 配时,会从第一个 case 分支开始,如果匹配成功,那么执行对应的逻辑代码,如果匹配不成功,继续执行下一个分支进行判断。 如果所有 case 都不匹配,那么会执行 case _分支, 类似于 Java 中 default 语句。

克里斯的博客 3430

简单模式匹配算法和KMP算法

参见原文 简单模式匹配算法 经典的模式匹配,是让模式串的首字符从主串的首字符开始向右匹配。 匹配的规则是: 1.在主串的第i个位置,让pos=i,如果主串pos位置的字符等于模式串的第一个字符,则pos++,再与模式串的第二个字符进行匹配。 2.如果又相等则继续向下匹配,直到匹配到模式串的结尾,就说明主串中存在该模式串;如果不相等,则停止匹配,回到主串中,并i++。 3.然后再让pos=i,重复上述步骤,直到i到达主串结尾。 相应代码如下: #include<stdio.h> #include&

ccxcuixia 2371
上一篇: 模式匹配
下一篇: 快速排序
Asssshzy
博客等级 码龄7年 28粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值