首页 > 编程语言 > 详细

字符串拷贝函数递归与非递归的C语言实现

时间:2014-03-13 07:45:47      阅读:542      评论:0      收藏:0      [点我收藏+]

 

  初学递归的时候,觉得很抽象,不好分析,确实如此,尤其是有些时候控制语句不对,导致程序进去无限次的调用,更严重的是栈溢出。既要正确的控制结束语句,又要有正确的进入下次递归的语句,还要有些操作语句......。所以要使用递归,必须每一层的思路要相当清晰。而循环和递归还是挺类似的说,循环的次数可以近似的理解为要递归是次数。那么下面我们看看递归和循环的区别:

1.递归实现strcpy函数:

void _strcpy(char *to,const char *from)
{
  if(‘\0‘ == *from){ 
    *to = ‘\0‘;
    return ;
  }
  *to++ = *from++;
  _strcpy(to,from);
}

分析:to 是目的字符串地址的一份拷贝,from是源字符串地址的一份拷贝。这个递归函数的结束控制语句就是源字符串的内容为‘\0‘的时候,递归结束。要是源字符串的内容不为‘\0‘ ,则进行赋值操作*to++ = *from++ ,执行完赋值语句之后,进入下一轮递归调用,而目的串和源串的地址也要进行相应的偏移,直到源字符串的内容为‘\0‘的时候,往目的地址里面添加一个‘\0‘,然后结束,继而跳出结束该函数。

下面是非递归的方法实现strcpy函数:

void* _strcpy(char *to,const char *from)

{

  assert( to != NULL || NULL != from);

  char *dest = to;

  while( (*to++=*from++) != ‘\0‘);

  return (void*)dest;

}

分析:非递归实现主要的关键语句在于循环”while( (*to++=*from++) != ‘\0‘);“这句话是先赋值,然后再与‘\0‘比较,等于则跳出循环,不等于则继续循环。

总结:该函数的实现主要在于操作系统自动会在字符串末尾加上一个字符‘\0‘来表示字符串到此结束。所以利用这个关键点,可以方便的实现字符串拷贝的操作。

 介于本人水平有限,欢迎指错,谢谢!

字符串拷贝函数递归与非递归的C语言实现,布布扣,bubuko.com

字符串拷贝函数递归与非递归的C语言实现

原文:http://www.cnblogs.com/chengliangsheng/p/3596270.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!