字符串(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 }

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值