字符串(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 }
各种实现过程是在不断的进步,为了让函数更高效,更实用,更完美。