永发信息网

怎样验证是否是子字符串c++不用string.h函数库 自己写 大神求助啊

答案:5  悬赏:70  手机版
解决时间 2021-02-27 19:21
  • 提问者网友:凉末
  • 2021-02-27 15:36
怎样验证是否是子字符串c++不用string.h函数库 自己写 大神求助啊
最佳答案
  • 五星知识达人网友:舍身薄凉客
  • 2021-02-27 16:25
#include<stdio.h>
#include<string.h>
typedef char * string;
int SimpleMatch(string S, string T);
int main()
{
char S[10],T[3];
printf("Please input string S:");
gets(S);
printf("Please input string T:");
gets(T);
int m;
m=SimpleMatch(S,T);
if(m==-1)
printf("No\n");
else
printf("Yes\n");
return 0;
}
int SimpleMatch(string S, string T)
{
int m,n,i,j;
n=strlen(S); m=strlen(T);
i=j=0;
while (i<n && j<m)
if (S[i]==T[j])
{ i++; j++; }
else
{ i=i-j+1; j=0;}
if (j>=m)
return i-m;
else
return -1;
}

不好意思,用的c语言,自己会转换成c++吧
全部回答
  • 1楼网友:北城痞子
  • 2021-02-27 19:08
这个有专门算法,而且算是比较深的算法了。 百度或google KMP算法、AC自动机。
  • 2楼网友:不想翻身的咸鱼
  • 2021-02-27 18:52
这个有个算法的。就是一个一个比较,如果最笨的办法,是比较不同了,退到最原始情况,大串,移动一个,继续比较。 如果加点高效的算法就是子串如果是前几个字符不同,比较时大的串直接向后移动不同字符串数量的位置。还有其他更快速的比较方式,自己想吧。
  • 3楼网友:三千妖杀
  • 2021-02-27 17:50
这个有个快速匹配算法,你百度一下KMP算法 int FastFind(string str,string patr,int *f) { int p=0,q=0; int m=str.size(),n=patr.size(); while(p<m&&q<n) if(str[p]==patr[q]) { p++; q++; } else if(q==0) p++; else {q=f[q-1]+1;}//cout<<endl<<"!!!!!"<<q<<endl;} if(q<n) return -1; return p-n+1; } void next(string str,int *f) { int m=str.size(); int i; f[0]=-1; for(int j=1;j<m;j++) { i=f[j-1]; while(str[j]!=str[i+1]&&i>=0) i=f[i]; if(str[j]==str[i+1]) f[j]=i+1; else f[j]=-1; //cout<<endl<<"f["<<j<<"]"<<f[j]<<endl<<"***"; } }
  • 4楼网友:山君与见山
  • 2021-02-27 16:38
这个有个快速匹配算法,你百度一下KMP算法 int FastFind(string str,string patr,int *f) { int p=0,q=0; int m=str.size(),n=patr.size(); while(p if(str[p]==patr[q]) { p++; q++; } else if(q==0) p++; else {q=f[q-1]+1;}//cout<
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯