为了账号安全,请及时绑定邮箱和手机立即绑定

请问用C语言实现数据结构中Index(S,T,pos)的算法?

/ 猿问

请问用C语言实现数据结构中Index(S,T,pos)的算法?

C
holdtom 2019-09-20 14:03:30

用C语言实现数据结构中Index(S,T,pos)的算法


查看完整描述

4 回答

?
红颜莎娜

这是模板。 template<class T >
class arrList : public List<T>

这个的意思是, arrList这个类,继承 List<T> 这个类。

至于 public List <T> 这个类,应该是之前有定义的类。 它也是一个模板类。

查看完整回答
反对 回复 2019-09-22
?
梵蒂冈之花

typedef struct{
char data[MaxSize];
int len;
}SqString;
int Index(SqString S,SqString T,int pos)
{//查找子串
int i,j;
i=pos-1;j=0;
while(i<S.len&&j<T.len)
if(S.data[i]==T.data[j]){i++;j++;}
else
{i=i-j+1;j=0;}
if(j>=T.len)return i-j+1;
else return 0;
}

void Replace(SqString &S,SqString T,SqString R)
{
int i,j,pos=1;
SqString sub;
while(pos<=S.len-T.len){
i=Index(S,T,pos);
if(i)
{
sub.len=S.len-i-T.len+1;
//截取S中替换T串后面的子串并存入sub
for(j=0;j<sub.len;j++)sub.data[j]=S.data[i+T.len-1+j];
//替换字符串
for(j=0;j<R.len;j++)S.data[i+j-1]=R.data[j];
//将sub子串链接到后面
for(j=0;j<sub.len;j++)S.data[i+R.len+j-1]=sub.data[j];
S.len=i+R.len+sub.len-1;
pos=i+R.len;
}
}
}


查看完整回答
反对 回复 2019-09-22
?
紫衣仙女

如果S=akdgadfed T=dg 那么先从S和T第一个字母开始比较,但由于a!=d,所以就要用S中的k和T中的d再比较,而此时i=1,j=1;而i=i-j+2=2,j=1;所以这么写

查看完整回答
反对 回复 2019-09-22
?
潇潇雨雨

第一次比较完后i = pos+1
第二次比较完后i = pos+2
……
if (S[i] == T[j]) { ++i; ++j;} //假设相同字符长n,i=pos+n,j=1+n;
else{ i = i-j+2; j =1;} //不相同时 i = i-j+2 = (pos+n)-(1+n)+2 = pos+1;
我也是看到别人的,但是我觉的这个更合理。

查看完整回答
反对 回复 2019-09-22

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信