解题思路:
不调用库函数,实现字符串连接需要自己编写的有

①:求字符串长度函数

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

别忘点赞哦-.-


点赞(7)
 

0.0分

2 人评分

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

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

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

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

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

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

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

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

评论列表 共有 1 条评论

望尽天涯路 5年前 回复TA
这题,我看了别的题解,貌似可以暴力破解的。。。。
就多组输入和输出就行了。。。。