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

因为你做比较的是针对某个字母而不是整个子串。你可以在纸上模拟一下循环。aba ab

头文件是C++的,可以改成C的

 #include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<queue>
#include<fstream>
#include<cstring>
#include<sstream>
#include<cmath>
#define inf 0x3f3f3f3f
#define mod 1000000007;
using namespace std;
long long n;
long long dp[11111111][3];
char str1[256];
char str2[256];
void re(char str1[], char str2[])
{
    int i, j,k, flag, n = 0;
    int len_1 = strlen(str1);
    int len_2 = strlen(str2);
    i = 0;
    while (i < len_1) {
        if (len_1 - i < len_2)break;
        flag = true;//假设能匹配
        for (j = 0; j < len_2&&i+j<len_1; j++) {
            if (str1[i + j] != str2[j]) {
                //匹配不成功
                flag = false;
                break;
            }
        }
        if (flag) {
            //匹配成功
            for (j = 0; j < len_2; j++) {
                str1[i + j] = 0;
            }
            i += len_2;
        }
        else {
            i++;
        }
    }

    char temp[256];
    for (i = 0; i < len_1; i++) {
        if (str1[i] != 0) {
            temp[n++] = str1[i];
        }
    }
    temp[n] = 0;
    strcpy(str1, temp);
}
int main() {
    //ios::ios_base::sync_with_stdio(true);
    scanf("%s%s", str1, str2);
    re(str1, str2);
    printf("%s\n", str1);
    return 0;
}