补全字符串堆分配存储之删除操作StrDelete
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#define OK 1
#define ERROR 0
#define MAXLEN 100
typedef struct {
char *ch;
int len;
} HString;
void Print(HString S) {
int i;
for(i=0; i<S.len; i++)
printf("%c",S.ch[i]);
printf("\n");
}
int StrAssign(HString *S,char *str) {
int i;
if(!S->ch)
free(S->ch);
for(i=0; str[i]!='\0'; i++);
if(i==0) {
S->ch=NULL;
S->len=0;
} else {
S->len=i;
if(!(S->ch=(char *)malloc(i*sizeof(char))))
return ERROR;
for(i=0; i<S->len; i++)
S->ch[i]=str[i];
}
return OK;
}
int StrDelete(HString *S,int pos,int len) {
/* if(S->ch == NULL)
return ERROR;
if((pos+len)>=S->len)
return ERROR;
if(pos<1||pos>S->len-1||len<0||len>S->len-1)
return ERROR;
HString *q;
q->ch =NULL;
q->len =0;
int i = 0;
q->ch=(char *)malloc(sizeof(char));
for(i;i<pos-1;i++){
q->ch[i] = S->ch[i];
q->len++;
}
for(i = pos+len-1;i<S->len;i++){
q->ch[i-len] =S->ch[i];
q->len++;
}
free(S->ch);
*S =*q;
S->len = S->len-len;
return OK;
*/
int i ;
if(pos<1||pos>S->len)
return ERROR;
if(len<=0||len>S->len-1||(pos+len)>S->len)
return ERROR;
for(i =pos-1;i<S->len-len+1;i++){
S->ch[i] = S->ch[i+len];
}
S->len -= len;
return OK;
}
int main() {
int pos,len,y;
HString s,t;
char chars[MAXLEN];
int select;
s.ch=NULL;
s.len=0;
t.ch=NULL;
t.len=0;
scanf("%s",chars);
StrAssign(&s,chars);
scanf("%d",&pos);
scanf("%d",&len);
if(StrDelete(&s,pos,len)==ERROR)
printf("Failed!");
else {
printf("Success!\n");
Print(s);
}
}