[求助]删去字符串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;
}
----------------解决方案--------------------------------------------------------