当前位置: 代码迷 >> C语言 >> [求助]删去字符串s中从第i个字符开始的连续j个字符
  详细解决方案

[求助]删去字符串s中从第i个字符开始的连续j个字符

热度:227   发布时间:2006-08-03 11:03:05.0
[求助]删去字符串s中从第i个字符开始的连续j个字符
求助:设计一个算法,删去字符串s中从第i个字符开始的连续j个字符.
搜索更多相关的解决方案: 删去  字符  

----------------解决方案--------------------------------------------------------

#include<stdio.h>
void del(char *p,int i,int j);
void main()
{
int i,j;
char str[50];
printf("Input str:");
scanf("%s",str);
printf("Input i,j:");
scanf("%d%d",&i,&j);
del(str,i,j);
printf("%s\n",str);
}

void del(char *p,int i,int j)
{
int n;
char *q;
for(n=1;n<i;n++)
p++;
q=p;
for(n=0;n<j;n++)
q++;
while(*q!='\0')
{
*p=*q;
p++;
q++;
}
*p='\0';
}


----------------解决方案--------------------------------------------------------
可以把字符串分成两段,再连接。
char *p=&str[j];
str[i]='\0';
再把str和*p连起来。
----------------解决方案--------------------------------------------------------
void del(char *p, const int begin, const int end)
{
char *p1, *p2;

p1=p2=p;

for(p1=p1+(begin-1), p2=p2+end; *p2!='\0'; p1++, p2++)
*p1=*p2;
*p1='\0';

return;
}


----------------解决方案--------------------------------------------------------
解决方法2
int del(char *p, const int begin, const int end)
{
char *p1, *p2;
char tmp1[20], tmp2[20];

p1=p2=p;

p1[begin-1]='\0';
strcpy(tmp1, p);

p2=p2+end;
strcpy(tmp2, p2);

sprintf(p, "%s%s\0", tmp1, tmp2);
//printf("%s\n", p);

return 0;
}
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<string.h>
int main(void)
{
char *string = NULL;
if (!(string=malloc(100))) exit (1);
gets(string);
int i, j;
scanf("%d%d", &i, &j);
strcpy(string+i-1, string+i+j-1);
puts(string);
free(string);
return 0;
}

----------------解决方案--------------------------------------------------------
  相关解决方案