原题链接:数据结构-字符串插入
解题思路:
①:创建一个结构体,包含字符串头结点指针和字符串的长度
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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复