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