int Index(char s[], char p[], int pos)
{
int i, j, slen, plen;
i = pos;
j = 0;
slen = strlen(s);
plen = strlen(p);
while((i < slen) && (j < plen))
{
if((s[i] == p[j]))
{
i++;
j++;
}
else
{
i = i-j+1;
j = 0;
}
}
if(j >= plen)
{
return (i-plen);
}
else
{
return -1;
}
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 101
void get_next( int *next,char *a,int la) /*求NEXT[]的值*/
{
int i=1,j=0 ;
next[1] = 0 ;
while ( i <= la) /*核心部分*/
{
if( a[i] == a[j] || j == 0 )
{
j ++ ;
i ++ ;
if( a[i] == a[j])
next[i] = next[j];
else
next[i] = j ;
}
else
j = next[j] ;
}
}
int str_kmp( int *next, char *A ,char *a, int lA,int la)/* EASY*/
{
int i,j,k ;
i = 1 ;
j = 1 ;
while ( i<=lA && j <= la )
{
if(A[i] == a[j] || j == 0 )
{
i ++ ;
j ++ ;
}
else
j = next[j] ;
}
if ( j> la)
return i-j+1 ;
else
return -1 ;
}
int main(void)
{
int n,k;
int next[MAX]={0} ;
int lA=0,la =0 ;
char A[MAX],a[MAX] ;
scanf("%s %s",A,a) ;
lA = strlen(A);
la = strlen(a);
for(k=la-1; k>= 0 ;k --)
a[k+1] = a[k] ;
for(k=lA-1; k>= 0 ;k --)
A[k+1] = A[k] ;
get_next(next,a,la) ;
k = str_kmp(next,A,a,lA,la);
if ( -1 == k)
printf("Not Soulation!!! ");
else
printf("%d ",k) ;
system("pause");
return 0 ;
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有