解题思路:
①:创建一个结构体,包含字符串头结点指针和字符串的长度
typedef struct String_{ char *data; int length; }*String,STRING;
②:创建这样结构体类型的两个变量A,B
③:为A.data 和B.data 分配空间大小为128
④:输入两个字符串,以空格为分界线 ,输入插入的位置pos(位置为以pos为下标的字符的前面一个)
⑤:判断插入的位置是否合法
if(pos>=1&&pos<=A.length+1) /*从第一个字符前面的一个位置pos=1,到最后一个字符后面的一个位置pos=A.length+1都是合法插入位置*/
⑥:判断插入后长度是不是大于127,大于的话,重分配空间
if(A->length+B->length>127) A->data=(char *)realloc(A->data,(A->length+B->length+1)*sizeof(char));
⑦:给B串腾出空间
/*把A中从下标为pos-1开始的所有字符向后移动B->length个长度*/ for(int i=A->length;i>=pos-1;i--) A->data[i+B->length]=A->data[i];
⑧:插入字符串B
for(int j=0,k=pos-1;j<B->length;j++) A->data[k++]=B->data[j];
注意事项:
要malloc分配的空间才能再分配,否则运行错误
参考代码:
#include<stdio.h> #include<string.h> #include<malloc.h> typedef struct String_{ char *data; int length; }*String,STRING; void insert_(String A,String B,int pos); void get_length(String x); int main() { int pos; STRING A,B; A.data=(char *)malloc(128*sizeof(char)); B.data=(char *)malloc(128*sizeof(char)); while(scanf("%s",A.data)!=EOF) { scanf("%s",B.data); get_length(&A); get_length(&B); scanf("%d",&pos); if(pos>=1&&pos<=A.length+1) insert_(&A,&B,pos); /*输出插入后的字符串*/ puts(A.data); } return 0; } /*---------------------------------------*/ void insert_(String A,String B,int pos) { if(A->length+B->length>127) A->data=(char *)realloc(A->data,(A->length+B->length+1)*sizeof(char)); /*把A中从下标为pos-1开始的所有字符向后移动B->length个长度*/ for(int i=A->length;i>=pos-1;i--) A->data[i+B->length]=A->data[i]; /*插入B*/ for(int j=0,k=pos-1;j<B->length;j++) A->data[k++]=B->data[j]; } /*---------------------------------------*/ void get_length(String x) { x->length=strlen(x->data); }
别忘点赞哦-.-!
0.0分
9 人评分