求助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
但实际运行结果 是都删除了,求解

你这里删除str1中的字符是有问题的,你的判断仅仅只是当str1与str2中一个字符相等的时候就删除str1中对应的字符。
既然是删除str1中包含str2的所有子串,则是str1与str2相同的部分删除(包含字符串的长度),而不是一个字符一个字符的比较删除。
语言表达不怎么好。

strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。

 void rs(char str1[] , char str2[]){

    int i,j,flag ;
    for(i = 0 ;str1[i] != '\0' ;){

        flag = i;
        for(j = 0;str2[j] != '\0';j ++){

            if(str1[flag] == str2[j]){
                flag ++;
            }else{
                flag = -1;
                break;
            }
        }

        if(flag - i != j){  //字符串不匹配
            i++;
        }else{
            int k = i;
            while(k < flag && str1[flag] != '\0'){
                str1[k++] = str1[flag++];
            }
            str1[k] = '\0';

        }
    }