Manchester


私信TA

用户名:wenyajie

访问量:331914

签 名:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

等  级
排  名 1
经  验 65524
参赛次数 1
文章发表 188
年  龄 0
在职情况 学生
学  校 Xiamen University
专  业 计算机科学

  自我简介:

在历史前进的逻辑中前进,这个逻辑就是人心向背的逻辑

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

①:求字符串长度函数

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分

3 人评分

  评论区

这题,我看了别的题解,貌似可以暴力破解的。。。。
就多组输入和输出就行了。。。。
2019-04-07 13:23:39
  • «
  • 1
  • »