0
点赞
收藏
分享

微信扫一扫

04(数据结构考研)串相关操作代码


文章目录

  • ​​:heart:求子串:heart:​​
  • ​​:heart:子串的比较操作:heart:​​
  • ​​:heart:子串的定位操作:heart:​​
  • ​​:heart:朴素模式匹配算法:heart:​​
  • ​​:heart:KMP算法:heart:​​

❤️求子串❤️

#include <stdio.h>
#include <cstdlib>

#define MAXSIZE 255//预定义串的最大长度为255
typedef struct {
char 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;
return true;
}
int main(){
return 0;
}

❤️子串的比较操作❤️

//比较操作
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=StrLength(S),m=StrLength(T);
SString sub;//用于暂存子串
while (i<=n-m+1){
SubString(sub,S,i,m);
if (StrCompare(sub,T)!=0)
++i;
else
return i;//用于返回子串在主串中的位置
}
return 0;
}

❤️朴素模式匹配算法❤️

int Index(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 Inde_KMP(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;
}


举报

相关推荐

0 条评论