zoukankan      html  css  js  c++  java
  • 字符串(strcpy)

    【1】字符串拷贝函数如何实现?

    (1)第一种设计思想:逐字符拷贝

    方法简述:把字符串内容看作字符数组,进行逐个字符拷贝,最后添加结束符

    示例代码如下:

     1 void strcpy1(char *strDest, const char *strSrc)
     2  {
     3      assert((strDest != NULL) && (strSrc != NULL));
     4      int i = 0;
     5      for (i = 0; strSrc[i] != '\0'; ++i)
     6      {
     7          strDest[i] = strSrc[i];
     8      }
     9      strDest[i] = '\0';
    10 }

    (2)第二种设计思想:巧借指针

    方法简述:逐个遍历,通过指针所指内容进行一一赋值,最后添加结束符。

    示例代码如下:

    1 void strcpy2(char *strDest, const char *strSrc)
    2 {
    3     assert((strDest != NULL) && (strSrc != NULL));
    4     while (*strSrc != '\0')
    5     {
    6         *strDest++ = *strSrc++;
    7     }
    8     *strDest = '\0';
    9 }

    (3)第三种设计思想:巧借指针,智用结束符

    方法简述:逐个遍历,通过指针所指内容进行一一赋值,把结束符作为循环结束的条件

    示例代码如下:

    1 void strcpy3(char *strDest, const char *strSrc)
    2 {
    3     assert((strDest != NULL) && (strSrc != NULL));
    4     while (*strDest++ = *strSrc++);    // while的极限使用
    5 }

    (4)第四种设计思想:实现链式表达式

    方法简述:拷贝结束,返回原地址。

    示例代码如下:

    1 char * strcpy4(char *strDest, const char *strSrc)
    2 {
    3     assert((strDest != NULL) && (strSrc != NULL));
    4     char *address = strDest;
    5     while ((*strDest++ = *strSrc++) != '\0')   //while的使用,以结束符为循环条件
    6     NULL;
    7     return address;
    8 }

    (5)第五种设计思想:实现链式表达式,智用结束符

    方法简述:拷贝结束,返回原字符串地址。

    示例代码如下:

    1 char * strcpy5(char *strDest, const char *strSrc)
    2 {
    3     assert((strDest != NULL) && (strSrc != NULL));
    4     char *address = strDest;
    5     while (*strDest++ = *strSrc++);
    6     return address;
    7 }

    (6)第六种设计思想:实现链式表达式,智用结束符,并且多一次判断

    方法简述:拷贝结束,返回原字符串地址。

    示例代码如下:

     1 char * strcpy6(char *strDest, const char *strSrc)
     2 {
     3     assert((strDest != NULL) && (strSrc != NULL));
     4     if (strDest == strSrc)
     5     {
     6         return strDest;
     7     }
     8     char *address = strDest;
     9     while (*strDest++ = *strSrc++);
    10     return address;
    11 }

    各种实现过程是在不断的进步,为了让函数更高效,更实用,更完美。

    作者:kaizen
    声明:本文版权归作者和博客园共有,欢迎转载。但未经作者同意必须保留此声明,且在文章明显位置给出本文链接,否则保留追究法律责任的权利。
    签名:顺序 选择 循环
  • 相关阅读:
    CF980E The Number Games
    UVALive 2995 Image Is Everything
    CF1148F Foo Fighters
    CF22E Scheme
    CF1045G AI robots
    学习笔记 并查集维护区间删除
    HEOI 十二省联考退役记
    立方网面试题总结
    Django学习排错备注
    追求卓越之旅(转)
  • 原文地址:https://www.cnblogs.com/Braveliu/p/2840797.html
Copyright © 2011-2022 走看看