1( 25分 )
在顺序串中,参数ch,ch1和ch2均是字符型,编写下列算法。
(1)将串r中所有其值为ch1的字符换成ch2的字符。
(2)将串r中删除其值等于ch的所有字符。
(3)从串r1中第index个字符起求出首次与串r2相同的子串的起始位置。
//(1)替换字符
void StrReplaceCh(SString *r,char ch1,char ch2
{
int i;
for(i=1;i<=r->len;i++){
if(r->ch[i]==ch1)
r->ch[i]=ch2;
}
}
//(2)删除字符
void Deletech(SString *r, char ch)
{ int i,j;
for(i=1;i<=r->len;i++)
if(r->ch[i]==ch)
{
for(j=i;j<=r->len;j++)
r->ch[j]=r->ch[j+1];
i--;
r->len--;
}
}
//(3)模式匹配
int Indexch(SString * r1,*r2)
{ int i,j,k;
for(i=index;i<=r1->len;i++)
for(j=i,k=1;r1->ch[j]==r2->ch[k];j++,k++)
if(!r2->ch[k+1])
return (i);
return(-1);
}
2( 25分 )
编写算法,实现顺序串的基本操作StrReplace(S,T,V)。
(用串V替换S串中的所有T串)
//法一
void Replace(StringType &S, StringType T, StringType V)
{
int n,m,k,i;
StringType sub;
InitStr(sub);
n = StrLength(S);
m = StrLength(T);
k = StrLength(V);
i = 1;
while(i <= n-m+1){
StrAssign(sub,SubString(S,i,m));
if(StrCompare(sub,T) == 0){
InitStr(sub);
Concat(sub,SubString(S,1,i-1));
Concat(sub,V);
Concat(sub,SubString(S,m+i,n-(m+i)+1));
StrAssign(S,sub);
i += k;
n = StrLength(S);
}
else{
++i;
}
}
}
//法二
void StrReplace(SString*S, *T,*V)
{
int i=1,pos;
while(i<=S->len - T->len+1){
pos=Strlndex(S, T,i);
if(pos){
StrDelete(s,pos,T->len);
Strlnsert(S,pos,V);
i=pos+V->len;
}
}
}