/************************************************************************* > File Name: link_string.c > Author: heathcliff > Mail: ----------------------- > Created Time: 2016年04月21日 星期四 10时06分22秒 ************************************************************************/ #include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct { char *ch;//串存储区 int length;//串长度 int maxLength; }Hstring; void init_string(Hstring *p, int max, char *string ) //初始化串 { int i; p->ch = (char *) malloc (sizeof(char)* max);//为p分配空间 p->maxLength = max; p->length = strlen(string); for(i=0;i<p->length;i++) p->ch[i] = string[i];//赋值 } int Insert(Hstring *p, int pos, Hstring t) //在pos位置进行插入操做 { int i; if(pos < 0){ printf("pos error\n"); return 0; } else{ /*若空间不够,从新分配*/ if(p->length + t.length > p->maxLength){ realloc(p->ch,(p->length + t.length) * sizeof(char)); p->maxLength = p->length + t.length; } /*依次向后移动t.length各位置 * 若pos = 4, p->length = 5; * 则p中第5个值向后移动t.length个距离 */ for(i = p->length-1;i >= pos;i--) p->ch[i+t.length] = p->ch[i]; /*插入操做开始*/ for(i=0;i<t.length;i++) p->ch[pos+i] = t.ch[i]; /*从新定义p的长度*/ p->length = p->length + t.length; } } int main(void) { Hstring string1 ,string2; int i, pos; /*此处写为char *s在运行时会报段错误 * 对待此等bug,暂时无能为力 * char *s; */ char s[5]; char k[9]; printf("请输入串1的值:\n"); for(i=0;i<5;i++){ /*此处若使用scanf("%c",&s[i]) * 则只能输入i/2个值 * 具体缘由暂未知 * 对此,宝宝也是服了 */ scanf("%s",&s[i]); } printf("请输入串2的值:\n"); for(i=0;i<9;i++){ scanf("%s",&k[i]); } printf("请选择插入位置\n"); scanf("%d",&pos); init_string(&string1,5,s); //将s值传入string1中 init_string(&string2,9,k); Insert(&string1,pos,string2);//将string2中的值插入string1中 for(i=0;i<string1.length;i++){ printf("[%c]",string1.ch[i]); } printf("\n"); return 0; }