c语言 求一个c语言的程序

来源:百度知道 编辑:UC知道 时间:2024/06/06 11:08:32
要求:INDEX算法变为程序!

主串s,子串p:Index(s, p)
将s中的第一个字符与p中的第一个字符进行比较;
若不同,就将s中的第二个字符与p中的第一个字符进行比较...,直到s的某一个字符和p的第一个字符相同,将它们之后的字符进行比较
若相同,将它们之后的字符进行比较
当s的某一个字符si与p的字符pj不同时,则s,p回退,即:将s中的第i-j+2个和p的第一个字进行比较,重复上述过程

请用VC++6.0编译

#include"stdio.h"
#include"string.h"
#define MAXTRLEN 255
typedef unsigned char SString[MAXTRLEN+1];

void StrAssign(SString &T,char *s);//把字符串s复制到T中
int Index_KMP(SString S,SString T,int pos);//KMP找子串位置算法
void get_next(SString T,int next[]);
void get_nextval(SString T,int nextval[]);
void main()
{
SString S,T;
char s[30];
int n=0;
printf("请输入主串\n");
gets(s);
StrAssign(S,s);
printf("请输入模式串\n");
gets(s);
StrAssign(T,s);
n=Index_KMP(S,T,1);
if(n)
printf("T是S的子串,位置为%d\n",n);
else
printf("T不是S的子串\n");
}
//利用模式串T,的next函数求T在主串S中第pos个字符之后的位置的KMP算法。其中,T非空,
//1<=pos<=StrLength(S)。
int Index_KMP(SString S,SString T,int pos)
{
int i,j;
int next[10];
i=pos;j=1;
get_next(T,next);
while(i<=S[0]&&j<