//算法功能:串的朴素模式匹配是最简单的一种模式匹配算法,又称为 Brute Force 算法,简称为BF算法
#include<stdio.h>
#include<stdlib.h>
#define MAXL 255
#define FALSE 0
#define TRUE 1
typedef int Status;
typedef unsigned char SString[MAXL+1];
//生成一个其值等于串常量strs的串T
void StrAssign(SString &T, char *strs)
{
int i;
T[0] = 0; //0号单元存储字串长度
for(i = 0; strs[i]; i++) //用数组strs给串T赋值
T[i+1] = strs[i];
T[0] = i;
}
//返回子串T在主串S中第pos个字符开始匹配的位置,若不存在,则返回0
int Index(SString S, SString T, int pos)
{
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 i - T[0];
else
return 0;
int main()
{
SString S, T;
int m;
char strs1[MAXL]; //建立主串S
char strs2[MAXL]; //建立模式串T
printf("请输入主串和子串:\n");
printf("主串S: ");
scanf("%s", strs1);
printf("子串T: ");
scanf("%s", strs2);
StrAssign(S, strs1);
StrAssign(T, strs2);
m = Index(S, T, 1);
if(m)
printf("主串 S = {%s}\n子串 T = {%s}\n在第 %d 个位置开始匹配!\n", strs1, strs2, m);
else
printf("主串 S = {%s}\n子串 T = {%s}\n匹配不成功!\n", strs1, strs2);
return 0;
}。