读书人

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

发布时间: 2012-10-26 10:30:59 作者: rapoo

怎么样删除字符串并打印剩余字符串
有题目:
利用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);  } 

读书人网 >C语言

热点推荐