主题:[讨论]串替换
#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]);
}
#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]);
}