vc程序问题(模式匹配算法)

来源:百度知道 编辑:UC知道 时间:2024/06/06 01:47:20
以下程序的功能是判断一个字符串是否为另一个字符串的子串。我检查了很久,都不知道到底哪错了。无论输入什么都是现实no。请高手指点一下 谢谢
#include"stdio.h"
#include"string.h"
#define maxsize 20
int strindex(char *s,char *t)
{
int i,j,len_s,len_t,num;
i=0;
j=0;
num=1;
len_s=strlen(s);
len_t=strlen(t);
for(i=0;i<len_s;i++)
{
while(s[i]==t[j])
{
i++;
j++;
num++;
}
if(num==len_t)
return 1;

}

return 0;

}

void main()
{
char s[maxsize],t[maxsize];
scanf("%s%s",s,t);
if(strindex(s,t))
printf("shi");
else
printf("no");
}

#include"stdio.h"
#include"string.h"
#define maxsize 20
int strindex(char *s,char *t)
{
int i,j,len_s,len_t,num;
i=0;
j=0;
//num=1;

len_s=strlen(s);
len_t=strlen(t);
for(i=0;i<len_s;i++)
{
num=0;
while(s[i]==t[j] && i<len_s && j < len_t )
{
i++;
j++;
num++;
}
if(num==len_t)
return 1;

}

return 0;

}

我是按t是s的子串改的,同时也是匹配算法里效率最低的,你可以参考本科教材,里边有改进型
int strindex(char *s,char *t)
{
int i,j,len_s,len_t,num;
i=0;
j=0;
num=1;
len_s=strlen(s);
len_t=strlen(t);
for(i=0;i<len_s;i++)
{
int h=i;
while(s[h]==t[j])
{
h++;
j++;