字符串堆分配存储:插入操作
补全字符串堆分配存储的插入操作StrInsert
#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("
");
}
int StrAssign(HString *S,char *str) {
int i;
if(!S->ch)
free(S->ch);
for(i=0; str[i]!= ; 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 StrInsert(HString *S,int pos,HString T) {
int i;
if(!S->ch||!T.ch)
return ERROR;
if(pos<=0||pos>S->len+1)
return ERROR;
S->ch=(char*)realloc(S->ch,S->len+T.len);
for(i=S->len-1;i>=pos-1;i--){
S->ch[i+T.len]=S->ch[i];
}
for(i=0;i<T.len;i++){
S->ch[i+pos-1]=T.ch[i];
}
S->len=S->len+T.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("%s",chars);
StrAssign(&t,chars);
scanf("%d",&pos);
y=StrInsert(&s,pos,t);
if(y==1) {
printf("Success!
");
Print(s);
} else
printf("Failed!
");
}
