#include <iostream>
#include <stdlib.h>
void find(char *p,char *q,int &i,int &j)
{int m,k,n,flog=0;
m=i;//////////
n=0;///////////
while(*(q+n)!=*(p+i)&&n<j) n++;
j=n-1;
if(*(q+n)==*(p+i))
{ flog=1;
for(k=n-1;k>=0;k--)//////////判断前*(P—1)与前*(Q+N)是否也相等
if(*(q+n-1)==*(p+i-1)) {n--;i--;}
else flog=0;
}/////////////////if
i=m;
if(flog==0||n==0) j=0;
}////////////////////find
/////////////////////////////////////////////////////////////////////////////////////
int main(int argc, char *argv[])
{
char str[100];
char str1[50];
int i,j;
cin>>str;/////////////////////输入主串
cin>>str1;///////////////////////////输入子串
i=j=0;
while(str[i])
{ while(str[i]==str1[j]&& str[i]!='/0') {i++;j++;}
cout<<i<<j<<endl;//////////不相等的位置
if(str1[j]=='/0') {cout<<"找到子窜的位置是"<<i-j<<endl;break;}
else
{
if(str1[j]==str1[0]) i++;//////////////////比较第一个就不等
else
find(str,str1,i,j);//////////////////////回溯I和J的值
} ////////////////////else
}//////////////////while
if(str1[j]!='/0') cout<<"没找到相应子串"<<endl;
system("PAUSE");
return 0;
}//////////////////////main
呵呵,既然老师说考研会考这算法,就写了下,感觉不够简练。。肯定也有漏洞的,,我这人老是丢三落四……