64,648
社区成员
发帖
与我相关
我的任务
分享
char szBaiduSearchingURL[2048] = "http://www.baidu.com/s?wd=" ;
strcat( szBaiduSearchingURL, (char *)tempCallBackPage.szKeyWords ) ;
//tempCallBackPage.szKeyWords是一个 unsigned char * 型数据。会存一个10个汉字左右
#include <iostream>
#include <string>
#include <assert.h>
using namespace std;
int * next( char * p )
{//生成next数组
int m = strlen(p) ;
assert( m > 0 ) ;
int * N = new int[m] ;
assert( N != 0 ) ;
N[0] = -1 ;
int i = 0 ;
int j = -1 ;
while( i < m )
{
while( j >= 0 && p[i] != p[j] )
{
j = N[j] ;
}
i++ ;
j++ ;
N[i] = j ;
if( p[i] == p[j] )
{
N[i]-- ;
}
}
return N ;
}
int KMP( char *orig , char *searchWord , int * n )
{//如果搜到返回在源串中的下标,否则返回-1
int i = 0 ;
int j = 0 ;
while( i < strlen(orig) )
{
while( orig[i] != searchWord[j] && j > 0 )
{
j = n[j] ;
}
if( searchWord[j] == orig[i] )
{
j++ ;
}
if( j == strlen(searchWord) )
{
delete []n ;
return i - j + 1 ;
}
i++ ;
}
delete []n ;
return -1 ;
}
int main()
{
char o[100];//源字符串
char s[100];//要搜索的字符
cin>>o;
cin>>s;
cout<<KMP(o, s, next(s))<<endl;
return 0;
}
// 此程序,为什么delete时,会弹出终止对话框???