T,则返回值>0;若S=T,则返回值=0;若SS.length||len<0||len>S.length-pos+1)
return 0;
if((*Sub).ch)
free((*Sub).ch); // 释放旧空间
if(!len) // 空子串
{
(*Sub).ch=NULL;
(*Sub).length=0;
}
else
{ // 完整子串
(*Sub).ch=(char*)malloc(len*sizeof(char));
if(!(*Sub).ch)
exit(0);
for(i=0;i<=len-1;i++)
(*Sub).ch[i]=S.ch[pos-1+i];
(*Sub).length=len;
}
return 1;
}
// 算法4.1
// T为非空串。若主串S中第pos个字符之后存在与T相等的子串,
// 则返回第一个这样的子串在S中的位置,否则返回0
int Index(HString S,HString T,int pos)
{
int n,m,i;
HString sub;
InitString(&sub);
if(pos>0)
{
n=StrLength(S);
m=StrLength(T);
i=pos;
while(i<=n-m+1)//从第i个位置开始求与T等长的子串,循环直到找到
{
SubString(&sub,S,i,m);//从第i个位置开始求得子串
if(StrCompare(sub,T)!=0)//将求得的子串与T对比,若不等则i++
++i;
else
return i;
}
}
return 0;
}
// 算法4.4
// 在串S的第pos个字符之前插入串Ts
int StrInsert(HString *S,int pos,HString T)
{
int i;
if(pos<1||pos>(*S).length+1) // pos不合法
return 0;
if(T.length) // T非空,则重新分配空间,插入T
{
(*S).ch = (char*)realloc((*S).ch,
((*S).length+T.length)*sizeof(char));
if(!(*S).ch)
exit(0);
for(i=(*S).length-1;i>=pos-1;--i) // 为插入T而腾出位置
(*S).ch[i+T.length]=(*S).ch[i];
for(i=0;i;
printf("串s%c串t\n",c);
Concat(&r,t,s);
printf("串t联接串s产生的串r为: ");
StrPrint(r);
StrAssign(&s,"oo");
printf("串s为: ");
StrPrint(s);
StrAssign(&t,"o");
printf("串t为: ");
StrPrint(t);
Replace(&r,t,s);
printf("把串r中和串t相同的子串用串s代替后,串r为:\n");
StrPrint(r);
ClearString(&s);
printf("串s清空后,串长为%d 空否?%d(1:空 0:否)\n",
StrLength(s),StrEmpty(s));
SubString(&s,r,6,4);
printf("串s为从串r的第6个字符起的4个字符,长度为%d 串s为: ",
s.length);
StrPrint(s);
StrCopy(&t,r);
printf("复制串t为串r,串t为: ");
StrPrint(t);
StrInsert(&t,6,s);
printf("在串t的第6个字符前插入串s后,串t为: ");
StrPrint(t);
StrDelete(&t,1,5);
printf("从串t的第1个字符起删除5个字符后,串t为: ");
StrPrint(t);
printf("%d是从串t的第1个字符起,和串s相同的第1个子串的位置\n",
Index(t,s,1));
printf("%d是从串t的第2个字符起,和串s相同的第1个子串的位置\n",
Index(t,s,2));
system("pause");
return 0;
}
/*
输出效果:
串t为: God bye!
串长为8 串空否?0(1:空 0:否)
串s为: God luck!
串s>串t
串t联接串s产生的串r为: God bye!God luck!
串s为: oo
串t为: o
把串r中和串t相同的子串用串s代替后,串r为:
Good bye!Good luck!
串s清空后,串长为0 空否?1(1:空 0:否)
串s为从串r的第6个字符起的4个字符,长度为4 串s为: bye!
复制串t为串r,串t为: Good bye!Good luck!
在串t的第6个字符前插入串s后,串t为: Good bye!bye!Good luck!
从串t的第1个字符起删除5个字符后,串t为: bye!bye!Good luck!
1是从串t的第1个字符起,和串s相同的第1个子串的位置
5是从串t的第2个字符起,和串s相同的第1个子串的位置
请按任意键继续. . .
*/