字符串的插入

时间:2025-02-15 17:57:13
  • #include<>
  • #include<>
  • #include<>
  • #define MAXSTRLEN 255
  • typedef struct
  • {
  • char *ch;
  • int length;
  • }HString;
  • void InitString(HString *P);
  • void StrAssign(HString *P,char charc[]);
  • int StrInsert(HString *S,HString *T,int pos);
  • void print(HString *P);
  • void InitString(HString *P)
  • {
  • P->ch='\0';
  • P->length=0;
  • return ;
  • }
  • void StrAssign(HString *P,char charc[])
  • {
  • int i,len;
  • if(P->ch)
  • free(P->ch);
  • len=strlen(charc);
  • if(!charc)
  • {
  • P->ch='\0';
  • P->length=0;
  • }
  • else
  • {
  • P->ch=(char *)malloc(len*sizeof(char));
  • if(!P->ch)
  • {
  • exit(-1);
  • }
  • else
  • {
  • for(i=0;i<len;i++)
  • {
  • P->ch[i]=charc[i];
  • }
  • P->length=len;
  • }
  • }
  • return ;
  • }
  • int StrInsert(HString *S,HString *T,int pos)
  • {
  • int i;
  • if(pos<1||pos>S->length+1)
  • {
  • return 0;
  • }
  • S->ch=(char *)realloc(S->ch,(S->length+T->length)*sizeof(char));
  • if(!S->ch)
  • {
  • exit(-1);
  • }
  • for(i=S->length-1;i>=pos-1;i--)
  • {
  • S->ch[i+T->length]=S->ch[i];
  • }
  • for(i=pos-1;i<pos-1+T->length;i++)
  • {
  • S->ch[i]=T->ch[i-(pos-1)];
  • }
  • S->length=S->length+T->length;
  • return 1;
  • }
  • void print(HString *P)
  • {
  • int i;
  • for(i=0;i<P->length;i++)
  • {
  • printf("%c",P->ch[i]);
  • }
  • printf("\n");
  • return ;
  • }
  • int main()
  • {
  • int pos;
  • HString S,T;
  • char chara[MAXSTRLEN];
  • char charb[MAXSTRLEN];
  • while(scanf("%s%s%d",chara,charb,&pos)!=EOF)
  • {
  • InitString(&S);
  • InitString(&T);
  • StrAssign(&S,chara);
  • StrAssign(&T,charb);
  • StrInsert(&S,&T,pos);
  • print(&S);
  • }
  • return 0;
  • }