字符串替换处理 。各位大神进来看一下,帮忙解决一下。
给定三个字符串,查找第一个字符串是否包含第二个字符串,如果包含,则将第三个字符串替换第二个字符串(第一个字符串可能多次包含第二个字符串); 例如:对于字符串“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编辑过]