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

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

posted @ 2012-12-31 16:55  kaizenly  阅读(959)  评论(0编辑  收藏  举报
打赏