求助C语言问题,我这个编程如何改????

要求:
键盘输入母串s1与子串s2,删除s1中所有的子串s2。
#include
#include
void re(char str1[],char str2[])
{
int i,j,flag,n=0;
for(i=0;str1[i]!=0;i++)
{
flag=0;
for(j=0;str2[j]!=0;j++)
if(str1[i]==str2[j])
{
flag=1;
break;
}
if(!flag)
str1[n++]=str1[i];
}
str1[n]=0;
}
int main()
{
char str1[40],str2[40];
scanf("%s%s",str1,str2);
re(str1,str2);
puts(str1);
return 0;
}
我输入abc ,要求删除ab,结果是c 这个运行正常
但我要是输入aba 要求删除ab,按理说结果是就剩下一个a
但实际运行结果 是都删除了,求解

你写的函数应该是把所有的相同字母都删除了,我在路上没有太仔细看,你自己多试试

#include
void re(char str1[],char str2[])
{
int i,j,k,z;
int count=0;
for(i=0;str1[i]!='\0';i++){
count=0;
for(j=0;str2[j]!='\0';j++){
if(str2[j]!=str1[i+j])
break;
count++;
}
if(str2[j]=='\0')
break;
}
for(k=i,z=k+count;str1[z]!='\0';k++,z++){
str1[k]=str1[z];
}
str1[k]='\0';
}
int main()
{
char str1[40],str2[40];
scanf("%s%s",str1,str2);
re(str1,str2);
puts(str1);
return 0;
}

楼主可以参考一下我的代码

#include
void re(char str1[],char str2[])
{
int i,j,k,z,s;
int count=0;
for(s=0;str1[s]!='\0';s++){
for(i=0;str1[i]!='\0';i++){
count=0;
for(j=0;str2[j]!='\0';j++){
if(str2[j]!=str1[i+j])
break;
count++;
}
if(str2[j]=='\0')
break;
}
for(k=i,z=k+count;str1[z]!='\0';k++,z++){
str1[k]=str1[z];
}
str1[k]='\0';
}
}
int main()
{
char str1[40],str2[40];
scanf("%s%s",str1,str2);
re(str1,str2);
puts(str1);
return 0;
}

前面的代码是删除首次出现的子串的,这个是删除所有出现的子串。也就是在前面代码的基础上进行改进。