#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 100
typedef struct{
    char*ch;
    int length;//串的当前长度
}HString;
void creatstring(HString &S)//创建一个一定长度的串
{
    char c;
    S.length=0;
    S.ch=(char*)malloc(MAXSIZE*sizeof(char));
    while(c!='\0')
    {
        scanf("%c",&c);
        S.length++;
    }
    printf("\n");
}
/*****************************************/
int HString_Replace(HString &S,HString T,HString V)//堆结构串上的置换操作,返回置换次数
{
    int n,i,j,k,l;
    for(n=0,i=0;i<=S.length-T.length;i++)
    {
        for(j=i,k=0;k<T.length&&S.ch[j]==T.ch[k];j++,k++);
        if(k==T.length) //找到了与T匹配的子串:分三种情况处理
        {
            if(T.length==V.length)
                for(l=1;l<=T.length;l++) //新子串长度与原子串相同时:直接替换
                    S.ch[i+l-1]=V.ch[l-1];
                else if(T.length<V.length) //新子串长度大于原子串时:先将后部右移
                {
                    for(l=S.length-1;l>=i+T.length;l--)
                        S.ch[l+V.length-T.length]=S.ch[l];
                    for(l=0;l<V.length;l++)
                        S[i+l]=V[l];
                }
                else //新子串长度小于原子串时:先将后部左移
                {
                    for(l=i+V.length;l<S.length+V.length-T.length;l++)
                        S.ch[l]=S.ch[l-V.length+T.length];
                    for(l=0;l<V.length;l++)
                        S[i+l]=V[l];
                }
                S.length+=V.length-T.length;
                i+=V.length;n++;
        }//if
    }//for
    return n;
}//HString_Replace 
/*--------------MAIN---------------*/
void main()

    HString S,T,v;
    int i;
    printf("输入一组数:");
    creatstring(S);
    printf("输入要替换的一组数:");
    creatstring(T);
    
    printf("输出新子表.和输出新串的数目:");
    HString_Replace(S,T, v);
    for(i=0;i<S.length;i++)
        
        printf("%c",S.ch[i]);
    
}