第1关:实现朴素的字符串匹配

#include <stdio.h>
#include <stdlib.h>
#include "mystr.h"
#pragma warning(disable:4996)
/*
从字符串t查找子字符串p。
字符串以数值结尾,例如p="str",那么p[0]='s',p[1]='t',p[2]='r',p[3]=0。
采用朴素的匹配算法。
返回子字符串第一次出现的位置,例如t="string ring",p="ring",则返回2。
若没有找到,则返回-1。
*/
int FindSubStr(char* t, char* p)
{// 请在此添加代码,补全函数FindSubStr/********** Begin *********/int i=0,j=0;while(p[i]!=0&&t[j]!=0) {if (p[i]==t[j]) {i++;j++;}else{j=j-i+1;i=0;}}if (p[i]==0){return j-i;}else {return -1;}/********** End **********/
}int main1()
{char t[100]; char p[100]; scanf("%s", t);scanf("%s", p);int i=FindSubStr(t, p);printf("Location: ");if(i==-1) {printf("not found!");}else {printf("%d",i); }return 0;
}

第2关:实现KMP字符串匹配

/*************************************************************date: copyright: Zhu EnDO NOT distribute this code without my permission.
**************************************************************/
//字符串 实现文件
//
#include <stdio.h>
#include <stdlib.h>
#include "kmp.h"
/void KmpGenNext(char* p, int* next)
//生成p的next数组, next数组长度大于等于字符串p的长度加1
{// 请在此添加代码,补全函数KmpGenNext/********** Begin *********/int i=0;while(p[i]){if(p[i]==p[0]){next[i]=-1;} else{next[i]=0;}i++;}/********** End   *********/
}int KmpFindSubWithNext(char* t, char* p, int* next)
//从t中查找子串p的第一次出现的位置
//若找到,返回出现的位置,否则返回-1
{int i=0, j=0;while(p[i]!=0 && t[j]!=0) {   //当两个字符数组均未遍历结束时if(p[i]==t[j])    {           //如果字符匹配,两数组指针位置均后移i++;  j++; }else  if (next[i]==0) {     //如果字符不匹配,且next[i]==0(不匹配的时候,短的数组所在位置的元素不是p[0])i = 0;                  //短的数组指针指向0,继续和长数组t[j]比较}else  {                     //如果字符不匹配,且next[i]==-1(不匹配的时候,短的数组所在位置的元素是p[0])i=0;                    //短的数组指针指向0,继续和长数组t[j+1]比较(因为t[j]!=p[0])j++; }}if(p[i]==0)  return j-i; //found  //如果元素下标从0开始,返回j-i;如果元素下标从1开始,返回j-i+1;else  return -1;  //not found
}

头歌-数据结构与算法-字符串匹配相关推荐

  1. 头歌 数据结构与算法答案 善用目录

    头歌 数据结构与算法答案 其他作业链接 非盈利文章,谢谢大家的分享和支持,如果大家有想要投稿的答案,也可以点击下面链接联系作者. 点击联系作者 作者博客 选择题加粗为正确答案 头歌java实训答案集 ...

  2. 数据结构与算法 / 字符串匹配 / BF、PK 算法

    零.前言 为了下面便于说明,先定义两个名词,分别是主串和模式串.在字符串 A 中查找字符串 B,则 A 为主串,B 为模式串. 假设,主串中字符数量为 L1,模式串的字符数量为 L2 . 一.BF 算 ...

  3. 数据结构与算法 / 字符串匹配 / Trie 树

    一.诞生原因 传统字符串比较时,需要将待比较的字符串与字符串集合中每一个串进行比较,结果比较浪费时间. Trie 树的发明就是为了解决上述问题. 二.基本信息 又称字典树,是一种树形结构,是一种哈希树 ...

  4. 【educoder】头歌 数据结构与算法 答案

  5. 头歌-数据结构与算法 - 线性表

    第1关:实现一个顺序存储的线性表 #include <stdio.h> #include <stdlib.h> #include "Seqlist.h" S ...

  6. C++KMP算法字符串匹配(附完整源码)

    C++KMP算法字符串匹配 C++KMP算法字符串匹配完整源码(定义,实现,main函数测试) C++KMP算法字符串匹配完整源码(定义,实现,main函数测试) #include <iostr ...

  7. kmp算法字符串匹配C语言实现

    kmp算法字符串匹配 在leetcode做题时,有道题就是写一个strstr函数,先用思路最简单的直接两个循环做,提示时间超过限制.就查了查kmp的资料 翻了下算法导论,感觉像在看数学书,看不太懂,最 ...

  8. Educoder头歌数据结构栈基本运算的实现及其应用

    头歌实践平台答案educoder 数据结构-栈基本运算的实现及其应用 第1关:顺序栈的实现 /***************************************************** ...

  9. KMP算法-字符串匹配(浅显易懂)

    KMP的经典思想就是:当出现字符串不匹配时,可以记录一部分之前已经匹配的文本内容,利用这些信息避免从头再去做匹配. 本篇将以如下顺序来讲解KMP, 什么是KMP KMP有什么用 什么是前缀表 为什么一 ...

最新文章

  1. jmeter吞吐量图形显示_Jmeter系列(43)- 详解 Jmeter 图形化 HTML 压测报告之 Charts 模块...
  2. MathType公式行距设置的方法
  3. 面试:Redis新版本开始引入多线程,谈谈你的看法?
  4. windows下网络丢包模拟软件(Network Emulator for Windows Toolkit)
  5. POJ - 2400 Supervisor, Supervisee(KM+打印方案)
  6. C语言、嵌入式位操作精华技巧大汇总
  7. 微服务实践沙龙-上海站
  8. 电脑技巧:Win10自带远程控制软件介绍
  9. css3禅密花园叫什么名字_CSS秘密花园: 自定义下划线
  10. 解决 Electron 5.0 版本出现 require is not defined 的问题
  11. Oracle In子句
  12. CentOS 系统查询开机启动项服务
  13. 8款受欢迎的代码编辑器,你喜欢用哪一款呢?
  14. CSS设计指南---字体和文本的布局
  15. 怎么去除烦人的WPS广告
  16. eGPU 能否一战?- Tensorflow GPU 基准测试
  17. 基于QT实现的职工住房管理系统
  18. 【基础编程题目集编程题及其答案】
  19. 基于强化学习的图像配准 - Image Registration: Reinforcement Learning Approaches
  20. 2021全球游戏市场规模及消费者主要分布情况:预计2024年全球游戏市场规模达到2187亿美元[图]

热门文章

  1. Yukon中椭圆弧对象的使用方法
  2. java+swagger+侵入_Spring boot+Swagger配置无侵入式Restful接口(一)
  3. 从零开始学Python练习题(一)
  4. 全球与中国地下用钢纤维市场深度研究分析报告
  5. 你的麦克风可能需要设置 未修复,问题已解决
  6. 电梯监控系统的服务器,电梯物联网及远程实时监控系统方案-20210712141708.docx-原创力文档...
  7. 李笑来,那个一顿饭点8条鲈鱼的人
  8. 使用Python turtle库画小猪佩奇
  9. Android手机变砖后的自救方法
  10. 【Web网站服务器开发】apache和tomcat 阿帕奇和汤姆猫