串-练习题

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;
		}
	}
}
  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值