数据结构之字符串的模式匹配算法
参考书籍:严蔚敏《数据结构》(C语言版)79页
函数原型:int strIndex(SString S,SString T,int pos)
函数说明:函数从S字符串的第pos位置开始,验证S中是否存在字符串T,若存在返回T在S中的位置,否则返回0。例如,当S = today is a good day,T = good,若pos = 1,则返回11,若pos = 12,则返回0。假设S长为m,T长为n,则算法复杂度为m*n。
特别注意:本处使用的串存储结构为定长顺序存储结构,字符从S[1]开始存储,而S[0]则用来存储字符串的长度。
编程软件:DEVC++
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 25
typedef unsigned char SString[MAXSIZE+1];
int strIndex(SString S,SString T,int pos)
{
int i = pos;
int j = 1;
while(i<=S[0]&&j<=T[0])//从S的第pos个字符开始比较
{
printf("S[%d] = %c,T[%d] = %c\n",i,S[i],j,T[j]);
if(T[j] == S[i]){i++; j++;}//相同则继续比较
else{i = i-j+2; j=1;}//不相等则返回到下一个位置开始比较
}
if(j>T[0]) return i-T[0];//j>T[0]表示已经比较完T[0]长度的字符串
else return 0;
}
int main()
{
SString name;
SString str;
int i = 1,j = 1,pos;
char *s = "chenxuejun\0";
char *t = "jun\0";
printf("给name赋值name = chenxuejun\n");
while(*s != '\0')//给name赋值name = chenxuejun;
{
name[i] = *s;
name[0] = i;
s++;i++;
}
printf("\n给str赋值:str = jun\n\n");
while(*t != '\0')//给str赋值:str = jun
{
str[j] = *t;
str[0] = j;
t++;j++;
}
pos = strIndex(name,str,5);
printf("\nstr在name的第%d位置\n",pos);
}
运行结果:


浙公网安备 33010602011771号