KMP模式匹配算法以及普通模式匹配算法
来源:互联网 发布:那些淘宝客公司 编辑:程序博客网 时间:2024/05/17 21:47
/////////////////////////////////////////////////////////////////////////////////////////////
// if return value == -1 ;the indexSubStr is not exist;
// else the indexSubStr is exist.
////////////////////////////////////////////////////////////////////////////////////////////
int IndexSubStr(char* subStr,char* str,int pos=0)
{
if( (subStr==NULL)||(str==NULL)||(pos<0) )
return -1;
int lenStr = 0;
int lenSubStr = 0;
char* ptr = subStr;
while( *ptr!='/0' )
{
++lenSubStr;
++ptr;
}
//printf("lenSubStr = %d/n",lenSubStr);
ptr = str;
while( *ptr!='/0' )
{
++lenStr;
++ptr;
}
//printf("lenStr = %d/n",lenStr);
if( (pos>=lenStr)||(lenSubStr==0)||(lenStr<lenSubStr) )
return -1;
int j = 0;
int num = 0;
while( (pos<lenStr)&&(j<lenSubStr) )
{
++num;
if( str[pos]==subStr[j] ){ ++pos;++j;}
else{ pos = pos - j + 1; j = 0;}
}
printf("IndexSubStr: num = %d/n",num);
if( j==lenSubStr )
return pos-lenSubStr;
else
return -1;
}
bool GetNext(char* str,int next[],int lenNext=1)
{
if( (str==NULL)||(next==NULL)||lenNext<1 )
return false;
int lenStr = 0;
char* pStr = str;
while( pStr[lenStr]!='/0' )
++lenStr;
--lenStr;
if( lenStr>lenNext )
return false;
int i = 0;
int j = -1;
next[0] = -1;
//printf("text[%d] = %c, next[%d]=%d/n",i,str[i],i,next[i]);
while(i<lenStr)
{
if( (j==-1)||(str[i]==str[j]) )
{
++i;
++j;
if( str[i]!=str[j] ) next[i] = j;
else next[i] = next[j];
//printf("text[%d] = %c, next[%d]=%d/n",i,str[i],i,next[i]);
}
else
{
j = next[j];
}
}
return true;
}
//////////////////////////////////////////////////////////////////////////
// if return value == -1 ;the indexSubStr is not exist;
// else the indexSubStr is exist!
//////////////////////////////////////////////////////////////////////////
int IndexSubStrKMP(char* subStr,char* str,int pos=0)
{
if( (subStr==NULL)||(str==NULL)||(pos<-1) )
return -1;
int lenStr = 0;
char* pStr = str;
while( pStr[lenStr]!='/0' )
++lenStr;
if( lenStr==0 )
return -1;
int lenSubStr = 0;
pStr = subStr;
while( pStr[lenSubStr]!='/0' )
++lenSubStr;
if(lenSubStr==0)
return -1;
int* arrayNext = new int[lenSubStr];
if( arrayNext==NULL )
return -1;
memset(arrayNext,0,lenSubStr*sizeof(int));
if( !GetNext(subStr,arrayNext,lenSubStr) )
return -1;
int num = 0;
int j = 0;
while( (pos<lenStr)&&(j<lenSubStr) )
{
++num;
if( str[pos]==subStr[j] ){ ++pos; ++j; }
else
{
if( arrayNext[j]==-1 ){ ++pos;j=0; }
else j = arrayNext[j];
}
}
printf("IndexSubStrKMP: num = %d/n",num);
if( arrayNext!=NULL )
delete[]arrayNext;
if( j==lenSubStr )
return pos-lenSubStr;
return -1;
}
- KMP模式匹配算法以及普通模式匹配算法
- 普通模式匹配算法
- 模式匹配---KMP算法
- 模式匹配 KMP算法
- 模式匹配-KMP算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- 模式匹配kmp算法
- 模式匹配算法kmp
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- KMP模式匹配算法
- 开篇
- 精典情人节语录
- 可以显示IP的代码
- ASP语法速查表
- 半年目标!
- KMP模式匹配算法以及普通模式匹配算法
- 05年的经典语录之计算机科学
- google/yahoo部分员工的blogger
- DataGrid单元格移动变色,点击变色,双击取消颜色,排序.
- 又是新的一年,我要有新的开始
- 关于XPath
- WEB打印 转
- ASP.NET程序中常用的三十三种代码
- 前言