zoukankan      html  css  js  c++  java
  • 合并字符串的几个小程序

    某天被人问到关于合并两个字符串的小程序,没看明白人家的代码错在哪,只是觉得别扭,所以自己写了下。还发现了一些挺有意思的东西。做成了几个完整的小程序。

    #include<stdio.h>
    void main()

    {

        char s1[100],s2[100];

        int i,j;
        gets(s1);
        gets(s2);
        i=0;
        while(s1[i])i++;
         j=0;
        while(s2[j])
        {
            s1[i++]=s2[j++];
        }
        s1[i]='/0';
        puts(s1);
    }

    程序1:这个程序来源于网上,属于比较简练,特别是gets()和puts()的使用,属于比较简练。

     #include<stdio.h>

     char * connection(char s3[],char s4[],char s_temp[])
    {
     
     int i,j;
     i=0;
     while(s3[i])
     {
      s_temp[i]=s3[i];
      i++;
     }
     j=0;
     while(s4[j])
     {
      s_temp[i]=s4[j];
      i++;
      j++;
     }

     s_temp[i]='/0';

     
        return s_temp;
    }


    void main()
    {
     char s1[100],s2[100],s_tempt[100];
     printf("input the element of s1:/n");
     scanf("%s",s1);
     printf("input the element of s2:/n");
     scanf("%s",s2);
       

        char * s5=connection(s1,s2,s_tempt);


     puts(s5);
     puts(s1);
     puts(s2);


    }

    程序2:这里把合并字符串这个功能抽取出来,做成一个单独的函数。在调这个程序的时候,也碰到了几个比较有意思的问题。数组名就是个地址,也可以说是个指针,所以如果在connection函数中对数组进行操作,是会改变初始数组的。所以在这里,使用了第三个全局变量,是为了保证原有的字符串内容不被改变。

    #include<stdio.h>

    void connection(char s3[],char s4[],char s_temp[])
    {
     
     int i,j;
     i=0;
     while(s3[i])
     {
      s_temp[i]=s3[i];
      i++;
     }
     j=0;
     while(s4[j])
     {
      s_temp[i]=s4[j];
      i++;
      j++;
     }

     s_temp[i]='/0';

    }


    void main()
    {
     char s1[100],s2[100],s_tempt[100];
     printf("input the element of s1:/n");
     scanf("%s",s1);
     printf("input the element of s2:/n");
     scanf("%s",s2);
       

        connection(s1,s2,s_tempt);

     puts(s_tempt);
     puts(s1);
     puts(s2);


    }

    程序3:这个程序没有使用函数返回值,而是直接通过数组名是地址的原理,在connection函数对数组进行操作后,直接进行访问。因为操作后的数组也是全局变量,所以函数不用返回值,就可以直接访问。

    *#include<stdio.h>

    void connection(char s3[],char s4[],char * & temp,char s_temp[])
    {
     
     int i,j;
     i=0;
     while(s3[i])
     {
      s_temp[i]=s3[i];
      i++;
     }
     j=0;
     while(s4[j])
     {
      s_temp[i]=s4[j];
      i++;
      j++;
     }

     s_temp[i]='/0';

     
        temp=s_temp;
    }


    void main()
    {
     char s1[100],s2[100],s_tempt[100];
     char * p_temp;
     printf("input the element of s1:/n");
     scanf("%s",s1);
     printf("input the element of s2:/n");
     scanf("%s",s2);
       

       connection(s1,s2,p_temp,s_tempt);
        char * s5=p_temp;


     puts(s5);
     puts(s1);
     puts(s2);


    }

    程序4:这里的四个参数,是完全没有必要的。之所以要这么做,是要测试一下全局变量和局部变量的差别。四个参数里面前两个是要合并的字符串,第三个是指针的引用,第四个是全局变量的一个数组。connection函数将计算结果如果放在局部变量里,再赋给指针的引用的话,结果将是乱码,而赋给全局变量的话,最后的结果是正常的。这其实是体现了一个connection函数中的局部变量具有暂时性。

    PS:虽然这个小程序比较简单,但是如果仔细的去想的话,还是能体现出很多问题的。

  • 相关阅读:
    屏幕尺寸相关
    关于sqlite的数据库操作
    Service服务
    BroadcastReceiver广播接收器
    将博客搬至CSDN
    win7+WinDbg调试系统内核
    驱动
    驱动开发,走起!!哈哈
    动态链接库DLL
    2013年12月24号感受
  • 原文地址:https://www.cnblogs.com/ainima/p/6332040.html
Copyright © 2011-2022 走看看