KMP算法C语言实现

简介: KMP算法C语言实现
#include<stdio.h>
#include<string.h>
#define maxsize 100
typedef struct
{
  char data[maxsize];
  int length;
}sqString;
void get_next(sqString t, int next[])
{
  int i = 0;
  int j = -1;
  t.length = strlen(t.data);
  next[0] = -1;
  while (i < t.length - 1)
  {
  if (j == -1 || t.data[i] == t.data[j])
  {
    i++;
    j++;
    next[i] = j;
  }
  else
  {
    j = next[j];
  }
  }
}
int KMP(sqString t1,sqString t2,int next[])
{
  int i=0, j=0;
  int len1 = strlen(t1.data);
  int len2 = strlen(t2.data);
  while (i < len1 && j < len2)
  {
  if (j == -1 || t1.data[i] == t2.data[j])
  {
    i++;
    j++;
  }
  else
  {
    j = next[j];
  }
  }
  if (j >= len2)
  return i - len2 + 1;
  else
  return -1;
}
int main()
{
  int i = 0;
  int next[100];
  sqString t1, t2;
  printf("请输入主串:");
  scanf("%s",t1.data);
  printf("请输入副串:");
  scanf("%s", t2.data);
  get_next(t2, next);
  i = KMP(t1, t2, next);
  printf("%d\n", i);
  return 0;
}
相关文章
|
2天前
|
机器学习/深度学习 算法 C语言
【C言专栏】递归算法在 C 语言中的应用
【4月更文挑战第30天】本文介绍了递归算法在C语言中的应用,包括基本概念(通过调用自身解决子问题)、特点(调用自身、终止条件、栈空间)和实现步骤(定义递归函数、分解问题、设置终止条件、组合解)。文中通过阶乘计算和斐波那契数列两个案例展示了递归的使用,强调了递归可能导致的栈溢出问题及优化需求。学习递归有助于理解和应用“分而治之”策略。
|
9天前
|
算法 搜索推荐 C语言
C语言用流程图表示算法
C语言用流程图表示算法
16 0
|
18天前
|
存储 算法
图解Kmp算法——配图详解(超级详细)
图解Kmp算法——配图详解(超级详细)
|
21天前
|
搜索推荐 算法 C语言
【排序算法】C语言实现随机快排,巨详细讲解
【排序算法】C语言实现随机快排,巨详细讲解
|
21天前
|
搜索推荐 C语言 C++
【排序算法】C语言实现归并排序,包括递归和迭代两个版本
【排序算法】C语言实现归并排序,包括递归和迭代两个版本
|
21天前
|
搜索推荐 算法 C语言
【排序算法】C语言实现选择排序与冒泡排序
【排序算法】C语言实现选择排序与冒泡排序
|
22天前
|
算法 测试技术 C#
【字典树】【KMP】【C++算法】3045统计前后缀下标对 II
【字典树】【KMP】【C++算法】3045统计前后缀下标对 II
|
22天前
|
算法
【算法学习--字符串】(不含KMP算法)
【算法学习--字符串】(不含KMP算法)
|
24天前
|
机器学习/深度学习 存储 算法
初阶数据结构之---导论,算法时间复杂度和空间复杂度(C语言)
初阶数据结构之---导论,算法时间复杂度和空间复杂度(C语言)
|
29天前
|
算法 C语言
【算法与数据结构】 C语言实现单链表队列详解2
【算法与数据结构】 C语言实现单链表队列详解