/*************************************************************************
> 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;
}