串
这里把字符串的一些函数照这书上的抄了下,应该不会有什么错误,如果有,希望有人能提醒一下嘞,万分感谢(代码的搬运工)
#include "stdio.h"
#include "stdlib.h"
#define ElemType char
#define MaxSize 255
typedef struct {
ElemType ch[MaxSize];
int length;
}SString;
bool SubString(SString &Sub,SString S,int pos,int len)
{
if(pos+len-1>S.length)
return false;
for(int i=pos;i<pos+len;i++)
Sub.ch[i-pos+1]=S.ch[i];
Sub.length=len;
}
int StrCompare(SString S,SString T)
{
for(int i=1;i<S.length && i<=T.length;i++)
{
if(S.ch[i]!=T.ch[i])
return S.ch[i]-T.ch[i];
}
return S.length-T.length;
}
int Index(SString S,SString T){
int i=1,n=S.length,m=T.length;
SString sub;
while(i<=n-m+1){
SubString(sub,S,i,m);
if(StrCompare(sub,T)!=0)
i++;
else
return i;
}
return 0;
}
//朴素模式匹配算法
int Index1(SString S,SString T)
{
int k=1;
int i=k,j=1;
while(i<=S.length && j<=T.length){
if(S.ch[i]==T.ch[j]){
i++;
j++;
}else{
k++;
i=k;
j=1;
}
}
if(j>T.length)
return k;
else
return 0;
}
//KMP算法
int Index2(SString S,SString T,int next[])
{
int i=1,j=1;
while(i<S.length && j<T.length){
if(j==0 || S.ch[i]==T.ch[j]){
i++;
j++;
}
else
j=next[j];
}
if(j>T.length)
return i-T.length;
else
return 0;
}