题目:编写程序输入三个字符串,写一函数实现:输入三个字符串,将字符串1中里的字符串2用字符串3代替。
例如:
串1:“abcdefgh123456xy123xyxy”
串2:“1234”
串3:“ABCDE”
处理完后串1变为:"abcdefghABCDE56xy123xyxy"
思路:1.找出串1与串2重叠的位置(从头开始找,找到串1中与串2一一对应的片断,而后定位)
2.定好重复的位置后,利用函数将串1在与串2重复的位置分红两段(例如上题两段分别是“abcdefgh”和“56xy123xyxy”)
好了,思路有了就上源代码吧:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxn 105
int main(int argc, char* argv[])
{
char a[maxn],b[maxn],c[maxn],buf[maxn]={0};
scanf("%s%s%s",a,b,c);
int len2=strlen(b);
int len1=strlen(a);
int first=stringfind(a,b);
if(first!=0)
{
strcut(a,buf,len1,first,len2);
strcat(a,c);
strcat(a,buf);
printf("%s\n",a);
}
return 0;
}
void strcut(char* p,char* buf,int len1,int first,int len2) //strcut函数用来实现思路2
{
int j=0;
int i=first+len2; //这里的i的值是切开后第二个片断的第一个字符的位置
while((i+j)<len1)(PS:能够多尝试,用debug发现规律) { buf[j]=p[i+j]; j++; }p[first]='\0'; } int stringfind(char *m,char *n) //stringfind函数用来实现思路1 { int i,j; for(i=0;m[i]!='\0';i++) { if(m[i]!=n[0]) continue; //先判断串1中与串2第一个字符'1'相同的位置 j=0; while(n[j]!='\0'&&m[i+j]!='\0')//再逐个判断串1中的‘1’后面字符是否与串2的一一对应 { j++; if(m[i+j]!=n[j])break; } if(n[j]=='\0')return i; } return 0; }