字符串的简单模式匹配算法

字符串的模式匹配,就是通常见的IndexOf函数的实现过程。就是查询某个字符串T在另外一个字符串S中出现的位置
使用定长顺序存储结构的字符串可以简单的描述这个过程

先假定几个前提,设置几个类型
#define SIZE 80
typedef struct Chunk
{
char ch[SIZE];
struct Chunk *next;
}Chunk;
typedef struct
{
Chunk *head,*tail;//串的头尾指针
int curLen;//串的当前长度
}

//c,c++的字符串中0位置存储的是串的长度

匹配思想如下:
分别用指数i和j指示主串S和子串T的当前要比较的字符串的位置。基本思想是:从主串S的第pos个位置起和子串T的第一个字符进行比较,如果相等就继续逐个比较下一个字符;如果不相等从主串的下一个字符开始和子串的第一个字符进行比较。以此类推,直到子串T的每个字符都和主串S的一个连续的字符串相等,则称匹配成功。

函数代码
int IndexOf(SString s ,SString T,int pos)
//返回子串T在主串S第pos个字符后的位置,若不存在返回0
{
int 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 j - T[0];
else return 0;
}

本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

原文地址:https://www.cnblogs.com/zjypp/p/2319367.html