C语言实现串的基本模式匹配
来源:互联网 发布:终极斗士 知乎 编辑:程序博客网 时间:2024/06/10 15:08
前言
本程序是数据结构上机实验内容,参考《数据结构(C语言版)》(清华大学出版社)中串操作部分的伪代码实现。
题目要求
设计一个程序实现串的基本模式匹配。所谓模式匹配,就是判断某个串是否是另一个已知串的子串。若果是其子串,则给出该子串的起始位置。如果不是,则返回-1
实例代码及说明
#include <stdio.h>#include <stdlib.h>#include <string.h>#define STRING_INIT_SIZE 100 //串初始长度 int Index(char *S, char *T, int pos){ //返回字串T在主串S中第pos个字符之后的位置。若不存在,则函数值为0. //其中,T非空,1<=pos<=StrLength(s). int i = pos; int j = 1; while (i <= S[0] && j <= T[0]){ if (S[i++] != T[j++]){ i = i - j + 2; j = 1; } } return (j > T[0]) ? i - T[0] : -1;}int get_next(char *T, int next[]){ //求模式串T的next函数值并存入数组next。 int i = 1, j = 0; next[1] = 0; while (i<T[0]){ if (j == 0 || T[i] == T[j]) next[++i] = ++j; else j = next[j]; } return *next;}int Index_KMP(char *S, char *T, int pos){ //利用模式串T的next函数求T在主串S中第pos个字符之后的位置的KMP算法,其中T非空,1<=pos<=StrLength(S). int next[100]; *next = get_next(T, next); int j = 1, i = pos; while (i <= S[0] && j <= T[0]){ if (j == 0 || S[i] == T[j]) { ++i; ++j; } else j = next[j]; } return (j > T[0]) ? i - T[0] : -1;}void main(){ char S[STRING_INIT_SIZE],T[STRING_INIT_SIZE]; int s; //数组内数据存储格式: //{[元素0:串的长度],[元素1:第1个字符],[元素2:第2个字符],[元素3:第3个字符]……} printf("请输入主串:"); gets(S + 1); //从[1]单元开始存放串 *S = strlen(S + 1); //将串的长度保存至[0]单元 printf("请输入子串:"); gets(T + 1); *T = strlen(T + 1); printf("开始匹配的位置:"); scanf("%d",&s); s = Index(S, T, s); //使用普通方式匹配 printf("子串的位置(普通):%d\n",s); s = Index_KMP(S, T, s); //使用改进方式匹配 printf("子串的位置(改进):%d\n",s); system("pause");}
运行结果
参考资料
C语言线性表循环队列的基本操作
C语言实现顺序栈的基本操作
C语言实现链表的插入、删除、查询操作
C语言实现线性表的插入和删除操作
阅读全文
0 0
- C语言实现串的基本模式匹配
- 数据结构之串的模式匹配(C语言实现)
- C语言实现串的匹配算法
- 模式匹配 KMP C语言算法实现
- C语言实现KMP模式匹配算法
- 用c语言实现数据结构中的几个经典程序:串的模式匹配
- 用c语言实现数据结构中的几个经典程序:串的模式匹配
- 串的KMP模式匹配算法(优化) ----- C语言
- KMP字符串模式匹配的C实现
- c++-串的模式匹配
- BM模式匹配算法-实现(C语言)
- BM模式匹配算法-实现(C语言)(转)
- BM模式匹配算法-实现(C语言)
- 数据结构c语言实现字符串定位(模式匹配)
- C语言朴素模式匹配
- c语言中的串模式匹配,用java实现了一下
- 经典算法研究:模式匹配(子串匹配)之 KMP 算法(C语言实现版)
- 经典算法研究:模式匹配(子串匹配)之 BM 算法(C语言实现版)初版
- 三步实现Android任意控件悬浮效果
- redis cluster管理工具redis-trib.rb详解
- python文本相似度之距离计算详细介绍
- 设计模式(Design Patterns)-可复用面向对象软件的基础 03:单例模式(Singleton)
- input标签选中图片并且显示 复制粘贴即用
- C语言实现串的基本模式匹配
- 快速幂算法
- Zookeeper的单机模式与伪分布式模式的搭建
- 设计模式之单例模式
- 《简明python教程》的学习笔记
- Redis Cluster 3.0.5 集群实战
- Map分析
- 设计原则(二)
- Ubuntu使用中的一些问题