原题链接:数据结构-字符串插入
解题思路:
①:创建一个结构体,包含字符串头结点指针和字符串的长度
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分
8 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复