字符串替换处理 。各位大神进来看一下,帮忙解决一下。
给定三个字符串,查找第一个字符串是否包含第二个字符串,如果包含,则将第三个字符串替换第二个字符串(第一个字符串可能多次包含第二个字符串); 例如:对于字符串“abcabcdefghij”、“fgh”、“sk”,则程序输出“abcabcdeskij”。提示:1)确定合法字符集合;
2)对输入字符串的合法性进行判断。


程序代码:/*字符串替换,(不加<string.h>)*/
#include<stdio.h>
int Mystrlen(char *p)
{
char *ps=p;
for (;*ps;++ps);
return (ps-p);
}
char *Mystrstr(char *p1,char *p2)
{
char *ps=p2;
for (;*p1&&*p2;++p1)
if (*p1==*p2)
++p2;
else if (*ps!=*p1)
p2=ps;
else //这个要加,当p1正好为ps的第一个字母时p2要+1~
p2=ps+1;
if (*p1=='\0'&&*p2!='\0')
return NULL;
return (p1-(p2-ps)); //p2-ps为ps的长度~
}
void Move(char *p1,char *p3,int len_s2,int len_s3)
{
char *ps=p1;
int len=len_s2-len_s3;
if (len>0) //要分类讨论,len>0;len<0;len==0
for (p1=ps+len;*p1;++p1)
*p1=*(p1+1);
if (len<0) //当len<0时,字符串要移向尾部
{
char *pe=NULL;
for (;*p1;*p1++);
pe=p1-len;
for (;p1!=ps;--p1,--pe)
*pe=*p1;
}
for (p1=ps;*p3;++p3,++p1)
*p1=*p3;
}
int main()
{
char s1[80]="abccdabcdabccdabcdabbcd";
char s2[]="cd";
char s3[]="zzz";
char *p1=s1;
int len_s2=Mystrlen(s2);
int len_s3=Mystrlen(s3);
puts(s1); //这个输出用来检验
while (*p1)
{
p1=Mystrstr(p1,s2);
if (p1==NULL)
break;
Move(p1,s3,len_s2,len_s3);
++p1;
}
puts(s1);
return 0;
}[此贴子已经被作者于2016-12-15 03:18编辑过]

程序代码:/*字符串替换*/
#include<stdio.h>
#include<string.h>
int main()
{
char s1[80]="abccdabcdabccdabcdabbcd";
char s2[]="cd";
char s3[]="zzz";
char copy_s1[80]="\0";
char *p1=s1;
int len_s2=strlen(s2);
puts(s1); //这个输出用来检验
while (*p1)
{
p1=strstr(p1,s2);
if (p1==NULL)
break;
strcpy(copy_s1,p1+len_s2);
sprintf(p1++,"%s%s",s3,copy_s1);
}
puts(s1);
return 0;
}


[此贴子已经被作者于2016-12-15 03:30编辑过]
