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