C++ 实现KMP字符串匹配算法

简介: C++ 实现KMP字符串匹配算法

以前写的代码,先搬运到CSDN上来。先贴代码,后面补说明


代码实现


KMP主函


int KMP(char * t, char * p)
{
  int i = 0;
  int j = 0;
  int* pNext = new int[(int)strlen(p)]{-1};
  GetNext(p,pNext);
  while (i < (int)strlen(t) && j < (int)strlen(p))
  {
    if (j == -1 || t[i] == p[j])
    {
      i++;
      j++;
    }
    else
      j = pNext[j];
  }
  if (j == strlen(p))
    return i - j;
  else
    return -1;
}


GetNext函数


void GetNext(char * p, int * next)
{
  next[0] = -1;
  int i = 0, j = -1;
  while (i < (int)strlen(p))
  {
    if (j == -1 || p[i] == p[j])
    {
      ++i;
      ++j;
      next[i] = j;
    }
    else
      j = next[j];
  }
}


相关文章
|
2月前
|
存储 算法 安全
超级好用的C++实用库之sha256算法
超级好用的C++实用库之sha256算法
101 1
|
1月前
|
算法 数据处理 C++
c++ STL划分算法;partition()、partition_copy()、stable_partition()、partition_point()详解
这些算法是C++ STL中处理和组织数据的强大工具,能够高效地实现复杂的数据处理逻辑。理解它们的差异和应用场景,将有助于编写更加高效和清晰的C++代码。
23 0
|
1月前
|
算法
第四章 KMP算法理论基础
第四章 KMP算法理论基础
19 0
|
1月前
|
缓存 网络协议 API
C/C++ StringToAddress(字符串转 boost::asio::ip::address)
通过上述步骤和示例代码,你可以轻松地在C++项目中实现从字符串到 `boost::asio::ip::address`的转换,从而充分利用Boost.Asio库进行网络编程。
52 0
|
1月前
|
算法
KMP算法
KMP算法
30 0
|
1月前
|
存储 算法 程序员
迪杰斯特拉(Dijkstra)算法(C/C++)
迪杰斯特拉(Dijkstra)算法(C/C++)
|
1月前
|
编译器 C语言 C++
C/C++数字与字符串互相转换
C/C++数字与字符串互相转换
|
1月前
|
人工智能 算法 Java
【搜索算法】数字游戏(C/C++)
【搜索算法】数字游戏(C/C++)
|
2月前
|
存储 算法 安全
超级好用的C++实用库之国密sm4算法
超级好用的C++实用库之国密sm4算法
55 0
|
28天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
下一篇
无影云桌面