原题链接:字符串连接
解题思路:
不调用库函数,实现字符串连接需要自己编写的有
①:求字符串长度函数
int stringlen_(char *l)/*求字符串长度*/
{
int length=0;
while(l[length]!='\0')
{
length++;
}
return length;
}②:字符串的连接函数
char *link_string(char *a,char *b)/*连接字符串*/
{
int len_a=stringlen_(a);
int len_b=stringlen_(b);
if(len_a+len_b>=max)/*若连接后长度大于100,即大于等于101,则重分配空间*/
a=(char *)realloc(a,(len_a+len_b+1)*sizeof(char));
for(int i=stringlen_(a),j=0;j<=len_b;j++)/*这里j<=len_b,是因为把b中'\0'也一回存到a里*/
a[i++]=b[j];
return a;
/*这里因为重分配空间后,之前a指向的空间可能
被释放,新空间地址返回给a,但是这里的a是形参,与主函数里的a指针不一样,主函数里的a还指向那个被
释放的空间,所以出错*//*所以a指针还是要返回的*/
}③:字符串的输出函数
void out_putS(char *a)/*输出字符串*/
{
int i=0;
while(a[i]!='\0')
{
printf("%c",a[i]);
i++;
}
printf("\n");
return;
}注意事项:
不可以这样写
void link_string(char *a,char *b)/*连接字符串*/
{
int len_a=stringlen_(a);
int len_b=stringlen_(b);
if(len_a+len_b>=max)/*若连接后长度大于100,即大于等于101,则重分配空间*/
a=(char *)realloc(a,(len_a+len_b+1)*sizeof(char));
for(int i=stringlen_(a),j=0;j<=len_b;j++)/*这里j<=len_b,是因为把b中'\0'也一回存到a里*/
a[i++]=b[j];
}
/*若把上面的字符串连接函数改乘这样不对,我是这样理解的,这里因为重分配空间后,之前a指向的空间可能
被释放,新空间地址返回给a,但是这里的a是形参,与主函数里的a指针不一样,主函数里的a还指向那个被
释放的空间,所以出错*//*所以a指针还是要返回的*/1)若要这样写的话要这样写
void link_string(char **a,char *b)/*连接字符串*/
{
int len_a=stringlen_(*a);
int len_b=stringlen_(b);
if(len_a+len_b>=max)/*若连接后长度大于100,即大于等于101,则重分配空间*/
*a=(char *)realloc(*a,(len_a+len_b+1)*sizeof(char));
for(int i=stringlen_(*a),j=0;j<=len_b;j++)/*这里j<=len_b,是因为把b中'\0'也一回存到a里*/
(*a)[i++]=b[j];
/*把a定义为指向指针的指针,这样主函数里面的a的指向也会随空间分配的改变而改变*/
}2)对应程序(参考代码1)
#include<stdio.h>
#include<malloc.h>
#define max 101
void link_string(char **a,char *b);/*连接字符串*/
int stringlen_(char *l);/*求字符串长度*/
void out_putS(char *a);/*输出字符串*/
int main()
{
char *a=(char*)malloc(max*sizeof(char));
char *b=(char*)malloc(max*sizeof(char));
while(scanf("%s",a)!=EOF)
{
scanf("%s",b);
link_string(&a,b);
out_putS(a);
}
free(a);
free(b);
return 0;
}
/*----------------------------------------------------------*/
int stringlen_(char *l)/*求字符串长度*/
{
int length=0;
while(l[length]!='\0')
{
length++;
}
return length;
}
/*----------------------------------------------------------*/
void link_string(char **a,char *b)/*连接字符串*/
{
int len_a=stringlen_(*a);
int len_b=stringlen_(b);
if(len_a+len_b>=max)/*若连接后长度大于100,即大于等于101,则重分配空间*/
*a=(char *)realloc(*a,(len_a+len_b+1)*sizeof(char));
for(int i=stringlen_(*a),j=0;j<=len_b;j++)/*这里j<=len_b,是因为把b中'\0'也一回存到a里*/
(*a)[i++]=b[j];
}
/*----------------------------------------------------------*/
void out_putS(char *a)/*输出字符串*/
{
int i=0;
while(a[i]!='\0')
{
printf("%c",a[i]);
i++;
}
printf("\n");
return;
}参考代码)2:
#include<stdio.h>
#include<malloc.h>
#define max 101
char *link_string(char *a,char *b);/*连接字符串*/
int stringlen_(char *l);/*求字符串长度*/
void out_putS(char *a);/*输出字符串*/
int main()
{
char *a=(char*)malloc(max*sizeof(char));
char *b=(char*)malloc(max*sizeof(char));
while(scanf("%s",a)!=EOF)
{
scanf("%s",b);
a=link_string(a,b);
out_putS(a);
}
free(a);
free(b);
return 0;
}
/*----------------------------------------------------------*/
int stringlen_(char *l)/*求字符串长度*/
{
int length=0;
while(l[length]!='\0')
{
length++;
}
return length;
}
/*----------------------------------------------------------*/
char *link_string(char *a,char *b)/*连接字符串*/
{
int len_a=stringlen_(a);
int len_b=stringlen_(b);
if(len_a+len_b>=max)/*若连接后长度大于100,即大于等于101,则重分配空间*/
a=(char *)realloc(a,(len_a+len_b+1)*sizeof(char));
for(int i=stringlen_(a),j=0;j<=len_b;j++)/*这里j<=len_b,是因为把b中'\0'也一回存到a里*/
a[i++]=b[j];
return a;
}
/*----------------------------------------------------------*/
void out_putS(char *a)/*输出字符串*/
{
int i=0;
while(a[i]!='\0')
{
printf("%c",a[i]);
i++;
}
printf("\n");
return;
}别忘点赞哦-.-
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复