将主字符串中的子字符串删去并输出

题目:有两个字符串,将主字符串中的所有子字符串删去并输出。例如,主字符串为“This book is a very good book",子字符串为”book",结果为“This is a very good"。
问题:请问下面的代码哪里有问题呀?

#include
using namespace std;
#include 
int withstr(char*s1,char*subs)
{
    while(*subs&&*s1==*subs)
    {
        s1++;subs++;
    }
    return !(*subs);
}
char *delsub(char s1,char subs)
{
    char *p1,*p2;
    int len=strlen(subs);
    p2=p1=s1;
    while(*p1)
    {
        if(withstr(p1,subs))
        p1+=len;
        else *p2=*p1++;
    }
    *p2='\0';
    return *s1;
}
int main()
{
    char str1[80]="This book is a very good book";
    char str2[40]="book";
    cout<delsub(&str1,&str2[40])<return 0;
}


#include <cstring>
#include <iostream>
using namespace std;

int withstr(char *s1, char *subs)
{
    while (*subs && *s1 == *subs)
    {
        s1++;
        subs++;
    }
    return !(*subs);
}
// char *delsub(char s1, char subs)
char *delsub(char *s1, char *subs)
{
    char *p1, *p2;
    int len = strlen(subs);
    p2 = p1 = s1;
    while (*p1)
    {
        if (withstr(p1, subs))
            p1 += len;
        else
            *p2++ = *p1++; //*p2 = *p1++;
    }
    *p2 = '\0';
    return s1; // *s1;
}
int main()
{
    char str1[80] = "This book is a very good book";
    char str2[40] = "book";
    cout << str1 << endl
         << str2 << endl;
    // cout << delsub(&str1, &str2[40]) << endl;
    cout << delsub(str1, str2) << endl;
    return 0;
}