请高手帮忙看看,编不下去了!!

来源:百度知道 编辑:UC知道 时间:2024/05/22 19:11:48
编写函数,在字符串s中找出所有字符子串t,并用下划线替代之,例如s:abcdebcdbdhibcde ,t: bcd ,则输出: a_e_bdhi_e,原型说明为:void replace(char *s,char *t); 编写主函数验证上述函数的功能。

#include<stdio.h>
void replace(char *s,char *t)
{
int i;
int lens=strlen(s);
int lent=strlen(t);
for(i=0;i<=lens-lent;i++)
{
for(j=0,k=i;j<lent;j++,k++)
{
if(s[k]==t[j]) continue;
else break;
}
if(j==lent)

}
}
main()
{ char s[81]={'0'},t[81]={'0'};
printf("please enter the old char:\n");
gets(s);
printf("please enter the replace char:\n");
gets(t);
replace(a,t);
printf("%s\n",s);

}

子函数里面编不下去了。。应该怎样写才能替换啊?

给个效率高的,每个字母只移动一次,写了老半天才写对。。。

char* replace(char *s, const char *t)
{
char *p, *q, *r;

if (*t == '\0' || (p = strstr(s, t)) == NULL)
return;
r = p;
p += strlen(t);

while ((q = strstr(p, t)) != NULL)
{
*r++ = '_';
memmove(r, p, q - p);
r += q - p;
p += q - p + strlen(t);
}
*r++ = '_';
memmove(r, p, strlen(s) - (p - s));
r += strlen(s) - (p - s);
*r = '\0';

return s;
}

说明一下,replace的形参,最好定义成数组的形式,这样才符合逻辑要求
#include<stdio.h>
void replace(char s[],char t[])
{
int i,j,k,n;
int lens=strlen(s);
int lent=strlen(t);

char l[81];
for(i=0;i<=less;i++)
{
for(j=0,k=i;j<lent;j++,k++)
{
if(s[k]==t[j]) continue;
else break;
}
if(j==lent)
{
n=k-2;
s[n-1]='_';
strcpy(l,s+k);