一、字符串匹配
字符串匹配:即查看Str串(原串)中是否含有Sub串(子串),如果在原串中查找到了子串,则模式匹配成功,返回原串中的第一个字符在主串中的位置;如果未找到,则模式匹配失败,返回-1。
字符串匹配常用的算法包括:BF(Brute Force,暴力检索)、RK(Robin-Karp,哈希检索)、KMP(教科书上最常见算法)、BM(Boyer Moore)、Sunday等,下面将详细介绍Brute Force算法和KMP算法。
二、Brute Force算法
Brute Force算法即暴力检索法,也是我们最容易想到的一种算法。其基本思想如下:从原串的第一个字符开始与子串比较,若子串中每个字符都与原串匹配,则返回原串中第一个字符的位置;若不匹配,则原串的下标向后移动,再与子串进行比较。若整个循环完毕,还未找到匹配的位置,则返回-1。
该想法的图示如下:(其中str为原串,sub为子串,i和j分别为原串和子串的下标)
实现该算法的代码如下:
#include <stdio.h>
#include <string.h>
#define NOT_FOUND -1
int searchSubstring(const char *str,const char *sub);
int searchSubstring(const char *str,const char *sub){
int strLen = strlen(str);
int subLen = strlen(sub);
int i;
int j;
for(i = 0;i <= strLen - su