• 算法思想
  • 算法描述
  • 算法实现
  • 测试结果
  • 朴素的模式匹配算法评价

算法思想

从主串 S 的第 pos 个字符起和模式 T 的第一个字符比较之,若相同,则继续比较后续字符;否则从主串 S 的下一个字符起再重新和模式 T 的字符比较之。

例:S = ‘JINANSHI’,T = ‘NAN’。

算法描述

当采用定长顺序存储结构时,实现此操作的算法如下:

int Index(SString S, SString T, int pos)
{  i = pos;  j = 1;while (i <= S[0] && j <= T[0]) {if (S[i] == T[j]) { ++ i; ++ j; }   // 继续比较后继字符else {i = i – j + 2;  j = 1; }   // 指针后退重新开始匹配  }if ( j >T[0])    return i -T[0];else    return 0;
} // Index

算法实现

#include <stdio.h>
#include <stdlib.h>#define MAXSTRLEN 255//存储结构
typedef unsigned char SString[MAXSTRLEN + 1];
//基于该存储结构实现朴素的模式匹配
int Index(SString S, SString T, int pos)
{int i = pos;  int j = 1;while (i <= S[0] && j <= T[0]){if (S[i] == T[j]){++i;++j;}   // 继续比较后继字符else{i = i - j + 2;j = 1;}   // 指针后退重新开始匹配  }if (j > T[0])return i - T[0];elsereturn 0;
}bool StrAssign(SString str, char* src)
{char * c = src;int i = 0;for (; *c != '\0'; ++i, ++c){if (0 == i)str[0] = 0;else{str[0] = 0;for (int j = 1; j <= i; j++){str[j] = src[j - 1];str[0] += 1;}}}return true;
}int main()
{SString s;SString t;char x[] = "abcdefg";char y[] = "fg";StrAssign(s, x);StrAssign(t, y);int pos = Index(s, t, 3);if (pos != 0)printf("模式匹配成功,找到位置为%d\n", pos);elseprintf("模式匹配失败");return 0;
}

测试结果

朴素的模式匹配算法评价

设计思想简单、易于理解。

通常情况下,效率比较高。经常被程序员选用。
此时算法的时间复杂度为:O(n+m)
m、n分别为主串和子串的长度。

某些特殊的情况下,效率比较低。
此时算法的时间复杂度为:O(n*m)
m、n分别为主串和子串的长度。

朴素的串模式匹配(C语言实现)【串模式匹配】相关推荐

  1. 以串结构存储c语言版,数据结构C语言版 串的块链存储表示和实现

    <数据结构C语言版 串的块链存储表示和实现>由会员分享,可在线阅读,更多相关<数据结构C语言版 串的块链存储表示和实现(13页珍藏版)>请在人人文库网上搜索. 1.*数据结构C ...

  2. (篇八)C语言在母串删子串、输入位置截取子串

    文章目录 一.字符串 二.删除指定的字符 三.从母串中截取子串 四.输入位置截取子串 本篇主要介绍C语言字符串中的相关操作,然后分析两个C语言实例--在母串中指定删除子串.在母串中截取子串 一.字符串 ...

  3. 串行口发送子程序C语言,运用C语言对串行口进行操作.pdf

    运用C语言对串行口进行操作 第 27 卷第 5 期 唐山师范学院学报 2005 年 9 月 Vol. 27 No.5 Journal of Tangshan Teachers College Sep. ...

  4. 51单片机串行口程序c语言编程,单片机C语言编程串行口通讯.ppt

    单片机C语言编程串行口通讯 第7章 MCS-51单片机串行口 第7章 MCS-51单片机串行口 目 录 7.1 串行通信基本知识 7.2 串行口结构及控制 7.3 串行口工作方式 7.4 串行口应用举 ...

  5. 用c语言实现串的存储结构是指,数据结构学习笔记-串(C语言实现)

    串由零个或多个字符组成,说白了就是字符串.串的存储方式相对于线性表来讲有些不同,他分为以下几种:顺序存储.堆分配存储.链式存储.顺序存储通常在数组中的头元素存放字符串长度.堆分配存储通常会动态分配空间 ...

  6. 朴素模式匹配算法(C语言)

    一.什么是字符串的模式匹配? 字符串模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置. 注意: ①.子串--主串的一部分,一定存在. ②.模式串--不一定能在主串中找到 二.朴素模式匹配算法 ...

  7. 若S作主串,P作模式串,试分别写出利用BF算法和KMP算法的匹配过程。

    目   录 题目: 百度文库-答案: (1) (2) MOOC标准答案: (1) (2) mooc答案-截图: 数据结构(C语言版)-严蔚敏2007 题目: 设字符串S='aabaabaabaac', ...

  8. 异步串行通讯和同步串行通讯对比

    异步串行通讯和同步串行通讯对比 作者:刘洪涛,华清远见嵌入式学院高级讲师,ARM ATC授权培训讲师. 在计算机系统中,CPU和外部通信有两种通信方式:并行通信和串行通信.而按照串行数据的时钟控制方式 ...

  9. c语言数据结构字符串匹配,C语言数据结构之模式匹配字符串定位问题

    字符是计算机的单位,字符的值都取决于字符集,匹配字符串需要找有全新的算法,才能提高程序员的工作效率,今天爱站技术频道就为大家带来了C语言数据结构之模式匹配字符串定位问题,大家参考下文学习吧! C语言数 ...

  10. max9286 四合一_硅天下吉比特多媒体串行链路(GMSL)解串器MAX9286详细信息_产品参数_价格_联系方式_DAV数字音视工程网...

    MAX9286吉比特多媒体串行链路(GMSL)解串器接收多达四个GMSL串行器的数据,采用50Ω同轴电缆或100Ω屏蔽双绞线(STP)电缆,通过四个CSI-2通道输出数据.每条串行链路具有嵌入式控制通 ...

最新文章

  1. java hashcode返回1_java – 为什么hashCode()在所有连续执行中为对象返回相同的值?...
  2. python 去掉字符串的
  3. 计算机行业可以开安装服务费,安装服务费税率是多少
  4. UNITY Destroy()和DestroyImadiate()都不会立即释放对象内存
  5. 2016年10月20日 .NET Core 1.0.2 更新
  6. python 3d重建_3D点云重建原理及Pytorch实现
  7. ccs7调试linux,【图片】【吧主帖】在LINUX(ubuntu)系统下装CCSv6方法(原创)【dsp吧】_百度贴吧...
  8. 不同笔记本电脑BIOS的进入方法:
  9. Vue.js 学习笔记 八 v-for
  10. 课堂小结:返回一个整数数组所有子数和的最大值
  11. 移动web图片加载完获取img宽高
  12. 2021应届生DJI校招在线测评几点说明
  13. 浙江大学-研究生机器学习课程-课堂笔记
  14. 网络摄像机如何安装拾音器?进行同步录音
  15. 3.Orangepi PC2 使用busybox制作文件系统
  16. Python之scrapy实现的爬虫,百度贴吧的自动签到和自动发帖、自动回帖
  17. 【实用软件】多功能游戏工具箱-Watt Toolkit
  18. EOS、BPS怎样进行应用的部署
  19. 欧姆龙CP1H如何进行PLC远程编程及数据采集
  20. JSP cookie详解

热门文章

  1. 【Flask】数据的CRUD之增加和查询操作
  2. 多线程—事件Event
  3. 05-cache相关的系统寄存器
  4. optee中spinlock的实现原理详解
  5. VMprotect简介
  6. 利用WOFF模糊和电报渠道进行通信
  7. 进程线程003 模拟线程切换
  8. Cento7 PHP5.6 升级 PHP7.0.0
  9. 在Servlet中实现页面转发
  10. 5.1.3 IO控制方式