#include"string.h"
typedef struct
{ char vec[30];
int len;
}node;
//把串r2插入到串r1的第i个字符开始的位置上
void *insert(node *r1,node *r2,int i)
{ int k;
if(i>=r1->len) printf("不能插入!");
else
{ for(k=r2->len-1;k>=i;k--)
r1->vec[r2->len+k]=r1->vec[k];
for(k=0;k<r2->len;k++)
r1->vec[i+k-1]=r2->vec[k];
r1->len=r1->len+r2->len;
r1->vec[r1->len]='\0';
}
return r1;
}
main()
{ node *r1,*r2;
int i;
r1=(node*)malloc(sizeof(node));
r2=(node*)malloc(sizeof(node));
strcpy(r1->vec,"abcdefg");
strcpy(r2->vec,"234");
r1->len=strlen(r1->vec);
r2->len=strlen(r2->vec);
scanf("%d",&i);
insert(r1,r2,i);
printf("%s\n",r1->vec);
}//比如说 abcd 在第1位插入 11,结果应该是a11bcd 而不是 a11d
----------------解决方案--------------------------------------------------------
直接用数组来写直观一点 #include"stdio.h" #include"string.h"
void insert(char str1[],char str2[],int k) { int i; char str3[30]; char *p1,*p2; p1=str1; p2=str2; strcpy(str3,str1); for(i=0;i<k;i++) p1++; while(*p2!='\0') { str3[i]=*p2; i++; p2++; } while(*p1!='\0') { str3[i]=*p1; i++; p1++; } strcpy(str1,str3); }
main() { char str1[30]="abcde"; char str2[30]="123"; int i; printf("input insert position:\n"); scanf("%d",&i); insert(str1,str2,i); printf("%s",str1); getch(); }
[此贴子已经被作者于2005-3-29 21:53:46编辑过]
----------------解决方案--------------------------------------------------------
#include"stdio.h"
#include"string.h"
typedef struct
{ char vec[30];
int len;
}node;
/*/把串r2插入到串r1的第i个字符开始的位置上*/
void *insert(node *r1,node *r2,int i)
{ int k;
if(i>=r1->len) printf("不能插入!");
else
{ for(k=r1->len-1;k>=i-1;k--)
r1->vec[r2->len+k]=r1->vec[k];
for(k=0;k<r2->len;k++)
r1->vec[i+k-1]=r2->vec[k];
r1->len=r1->len+r2->len;
r1->vec[r1->len]='\0';
}
return r1;
}
main()
{ node *r1,*r2;
int i;
r1=(node*)malloc(sizeof(node));
r2=(node*)malloc(sizeof(node));
strcpy(r1->vec,"abcdefg");
strcpy(r2->vec,"234");
r1->len=strlen(r1->vec);
r2->len=strlen(r2->vec);
scanf("%d",&i);
insert(r1,r2,i);
printf("%s\n",r1->vec); getch();
}/*比如说 abcdefg 在第1位插入 234,结果是234abcdefg*/
----------------解决方案--------------------------------------------------------