如何样删除字符串并打印剩余字符串

怎么样删除字符串并打印剩余字符串
有题目:
利用C的库函数strlen、strcpy(或strcat)写一个算法voidStrDelete(char *S,int i,int m),删除串S中从位置i开始连续的m个字符。若i≥strlen(S),则没有字符被删除;若i+m≥strlen(S),则S中从位置i开始直至末尾的字符均被删去.。
感觉做不出来???

------解决方案--------------------
C/C++ code

#include"stdio.h"
#include"string.h"

void StrDelete(char *S,int i,int m)
{
    int len = 0;
    char *p = NULL;
    len = strlen(S);
    p = S;

    if(i >= len)
    {
        return;
    }
    else if(i + m >= len)
    {
        *(p+i) = '\0';
    }
    else
    {
        *(p+i) = '\0';
        p += i + m;
        strcat(S,p);
    }
}

int main()
{
    char S[128] = {0};
    strcpy(S,"this is a test string!");
    StrDelete(S,1,3);  
    printf(S);
    return 0;
}

------解决方案--------------------
有个问题,i 是从0开始还是从1开始,比如字符串123456,strdel(s, 1, 1) 的结果是12345呢,还是23456?

C/C++ code

/**
 * @file    strdel.c
 * @brief   
 */

#include <stdio.h>
#include <string.h>

char *strdel(char *s, int i, int m)
{
    int n;

    n = strlen(s);

    if (i >= n)
        ;
    else if (i + m > n)
        s[i] = '\0';
    else
        strcpy(s + i, s + i + m);

    return s;
}

int main(int argc, char *argv[])
{
    char s[100];

    strcpy(s, "012345");
    printf("%s\n", strdel(s, 2, 2));
    
    strcpy(s, "012345");
    printf("%s\n", strdel(s, 2, 7));

    strcpy(s, "012345");
    printf("%s\n", strdel(s, 6, 7));

    strcpy(s, "012345");
    printf("%s\n", strdel(s, 5, 7));

    return 0;
}

------解决方案--------------------
C/C++ code
void StrDelete( char * Str , int iBeg , int iLen )
{
    int iStrLen = strlen( Str );
    if ( iBeg >= iStrLen )
    {
        return;
    }
    if ( iBeg + iLen >= iStrLen )
    {
        Str[iBeg] = 0;
    }
    else
        strcpy( Str + iBeg , Str + iBeg + iLen );
}

------解决方案--------------------
晕死,写太急完全写错了……
C/C++ code

char *strdel(char *str,int i,int m)
{
    char *end=str+strlen(str)-m,*s;

    if(i>=0&&m>0)
    {
        for(s=str+i;s<end;s++)
            *s=s[m];
        *s=0;
    }

    return(str);
}

------解决方案--------------------
void StrDelete(char *S,int i,int m)
{
int len=strlen(s);
if(i<len)
{
if(i+m>=len)
{
s[i]=0;
}
else
{
for(s=str+i;s<end;s++)
*s=s[m];
*s=0;
}
}
}
------解决方案--------------------
也可以用memcpy/memmove
C/C++ code
void StrDel(char *S,size_t i,size_t m)
{
  char* end = S + strlen(S);
  char* dest = s + i;
  if(dest > end) dest = end;
  char* src = dest + m; 
  if(src > end) src = end;
  //here we go
  memcpy(dest, src, src - dest); 
 }