6-3 字符串 - 6. 查找子串(BF算法)* (10 分)_半零落的博客-程序员秘密

技术标签: 数据结构  

C语言标准函数库中包括 strstr 函数,在主串中查找子串。作为练习,我们自己编写一个功能与之相同的函数。

函数原型

// 查找子串
char* StrStr(const char *txt, const char *pat);

说明:txtpat 分别为主串和子串的起始地址。若查找成功,则函数值为子串在主串中首次出现的起始地址,否则函数值为NULL。

特别地,我们对C语言库函数strstr进行适当修改:若子串为空串,则没有意义,函数值规定为NULL。

裁判程序

#include <stdio.h>

// 查找子串
char* StrStr(const char *txt, const char *pat);

int main()
{
    char m[1024], s[1024], *p;
    gets(m);
    gets(s);
    p = StrStr(m, s);
    if (p)
    {
        printf("%d\n", p - m);
    }
    else
    {
        puts("Null");
    }
    return 0;
}

/* 你提交的代码将被嵌在这里 */

输入样例1

This is a pencil
is

输出样例1

2

输入样例2

This is a pencil
be

输出样例2

Null

 

代码:

char* StrStr(const char *txt, const char *pat)
{
      int i=0;
      int j=0,k=0;
      int m=strlen(txt);
      int n=strlen(pat);
      if(n==0)
        return NULL;
    while(i<m && j<n)
    {
        if(txt[i]==pat[j])   //继续匹配下一个字符
        {
            ++i;
            ++j;
        }
        else
        {
            i=i-j+1;  //主串从下一个位置开始匹配
            j=0;   //子串从头开始匹配
        }
    }
    if(j==n)
        return (char*)(txt+i-n);
    else
        return NULL;
}

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43634412/article/details/102826839

智能推荐

tplinkac2600评测_tp-link千兆ac2600无线5g路由器好不好?全面解析真实情况如何? | 智能扫地机器人评测..._weixin_39716800的博客-程序员秘密

tp-link千兆ac2600无线5g路由器好不好?全面解析真实情况如何?800+1733双频 八天线 全千兆端口 双频合一tp-link千兆ac2600无线5g路由器目前这款券后到手价格289&gt;&gt;&gt;【点此前去领券】更多网友用后反馈&gt;&gt;&gt;&gt;【点此查看优缺点评测】在日常生活中总会有许多的杂物,但如果柜子不足,这么多的东西既找不到合适的地方放了,也影响了生活的...

Python多进程实现原理_python 多进程实现_Tom Hardy的博客-程序员秘密

多进程关键字#p1.terminate() #主动杀死子进程#p1.is_alive() #判断子进程是否存活开启进程的俩种方式#方式1:直接使用默认的Process类#实验目的:查看进程起的时候是需要时间的,起的时间足够python把下面的代码运行完,from multiprocessing import Processimport timedef task(name):...

姿态估计Bottom-up系列中的Grouping方式一:Associative Embedding_associate embedding_ming6383的博客-程序员秘密

原文:Associative Embedding: End-to-End Learning for Joint Detection and Groupinggithub:Abstract文章提出了一种全新的用于detection和grouping的监督方法,Associate Embedding。意外的多人姿态估计、实例分割、多目标跟踪问题都采用了two-stages,先detect后group的方式。文章提出的associate embedding 同时输出detection 和 grouping的

源码分析Gson序列化和反序列化流程_yetaoii的博客-程序员秘密

源码分析Gson序列化和反序列化流程一、核心源码1.核心对象— TypeAdapter 类型适配器,里面 public abstract class TypeAdapter&lt;T&gt; { /** * 该方法用于toJson时写入数据序列化 **/ public abstract void write(JsonWriter out, T value) thro...

mybatis 读取blob数据_mybatis blob读取_archer.wu的博客-程序员秘密

mybatis 读取blob数据mybatis读取blob数据过程:1、从数据库中读出blob数据类型,用pojo中的byte[]接收。2、把文件保存成文件(或者变成base64也行)。Customer.javapublic class Customer { private String cuscode; private byte[] qrcode;

Unity热更方案 ILRuntime 和 toLua的比较_ilruntime与lua热更差异_魔术师Dix的博客-程序员秘密

前言目前市面上流行的热更方案就是lua系列和ILRuntime,选取哪一种需要根据自己的项目进行比对。无论是ILRuntime还是toLua都是市面上有在用到的热更方案。直观上来讲,都可以通过把代码放在StreamingAssets中,从而达到热更的目的。本文旨在从迁移成本、运行效率两方面来进行比对两者间的差异。 迁移成本一般Unity都是C#编写的,所以单看迁移成本,IL...

随便推点

java必学_Java学习每月必温故的知识(上)_weixin_39989939的博客-程序员秘密

原标题:Java学习每月必温故的知识(上)1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件。Java 被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java 虚拟机让这个变为可能,因为它知道底层硬件平台的指...

网络敏感词过滤_mjTree的博客-程序员秘密

这几天在没事的时候在打王者的时候,有时候前期上单老送人头、中路不守塔、下路射手辅助常被抓、我方打野只刷野等开始逆风的时候,队友之间就开始互喷。最近在刷Dou音的时候,发现有这些互喷视频。反正敏感词都变成了***的样子,所以就研究一下敏感词的过滤方法有哪些。上单:打野是**吗,都残血了也不来抓打野:法师是脑子有**,能不能守好线射手:辅助是**,不出辅助装还老卖我法师:上路下路都是...

Unity开发时遇到的各种需要注意的地方_executionengineexception: string conversion error:_魔术师Dix的博客-程序员秘密

前言:最近在做东西的时候突然想到,自己以前做过的项目有很多地方需要注意的,然而并没有记录下来,导致下次还会出现这样的问题。于是就有了这个想法,把之前各种各样奇奇怪怪的问题都记录下来,解决方案也写下了。一是加深记忆,二是万一又遇到了好歹也有个参考;正文:1、Transform.GetComponentsInChildren找不到组件!?这是因为Transform.G...

java笔记(基础+修饰符+选择结构+分支结构+循环结构+方法+数组+面对对象+三大特性)_朴实无华的小韦的博客-程序员秘密

文章目录语言基础变量概念全局变量局部变量实例变量声明数据类型常用基本数据类型引用数据类型Unicode编码表ASCII字符表运算符算术运算符赋值运算符关系运算符逻辑运算符三元运算符(不熟)类型转换修饰符访问权限修饰符private私有访问,只可以所在类内部访问,其他类不可以直接访问default默认访问,只能在同一个包内的类访问protected保护型:如果一个类被protected修饰,那么这个类只能被自己的子类访问,无论子类在不在这个类所在的的包中public可以被一切包或类访问一表看非访问修饰符sta

【java基础】枚举类(enum)_java枚举_秃头披风侠.的博客-程序员秘密

在java中有一种特殊的类型就是枚举类,对于一个有限的有固定值的集合,我们就可以考虑使用枚举类来进行表示,例如服装的大小为 小,中,大,超大。一个颜色集合为红色,蓝色,黄色,绿色。

RT-Thread 断言:assertion failed at function:rt_mutex_take 等_Nameless-Y的博客-程序员秘密

断言断言是什么?https://www.cnblogs.com/thisway/p/5558914.html“ASSERT()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE(0),程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于...

推荐文章

热门文章

相关标签