解题思路:
①:创建一个结构体,包含字符串头结点指针和字符串的长度

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);
}

别忘点赞哦-.-!

点赞(7)
 

0.0分

8 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论