#include <stdio.h>
#include <string.h>
int main()
{
int isequal(char *,char *,int);
int replace(char *,char *,int,int,int,int);
int i,count=0,len_s,len_t,len_p;
char s[1000],t[80],p[80];
gets(s);
gets(t);
gets(p);
len_t=strlen(t);
len_p=strlen(p);
for(i=0; i<(len_s=strlen(s)); ++i)
//这里应该注意字符串s的长度在执行过程中已经改变,需重新获取
{
if(s[i]==t[0])
{
if(isequal(&s[i],t,len_t))
{
i=replace(&s[i],p,len_s,len_t,len_p,i);
//对应的i也要改变,这里我把对i的操作放到了replace函数
++count;
}
}
}
if(count==0)
printf("NO");
else
puts(s);
return 0;
}
int isequal(char *s,char *t,int len)
{
int i;
for(i=0; i<len; ++i)
{
if(s[i]==t[i])
continue;
else
break;
}
if(i==len)
return 1;
else
return 0;
}
int replace(char *s,char *p,int len_s,int len_t,int len_p,int i0)
{
int i;
if(len_t<len_p)
{
for(i=len_s+len_p-len_t; i>=len_p; --i)
{
s[i]=s[i-len_p+len_t];
}
for(i=0; i<len_p; ++i)
{
s[i]=p[i];
}
return (i0+len_p-len_t);
}
else
{
for(i=0; i<len_p; ++i)
{
s[i]=p[i];
}
for(i=len_p; i<len_s; ++i)
{
s[i]=s[i+len_t-len_p];
}
return (i0-len_t+len_p);
}
}
//最后很郁闷的是,可能是因为编译器错误,字符串的长度总是莫名其妙的变为随机数
//浪费了很长时间。。。
//看了别人的解答,我充满了困惑
//再加上一个数组的确会简化代码,但是会不会影响效率?
//哪一个更好呢?
第十五周-字符串的修改(串)
最新推荐文章于 2024-05-25 21:01:18 发布