CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

绞尽脑汁也想不出解法,请教递归算法!

楼主weping(无语)2005-12-15 17:01:52 在 C/C++ / C++ 语言 提问

编写函数reverse(char   *s),   用递归算法使字符串S倒序(是将主程序那儿的字符串值顺序倒过来,而不仅仅是倒序显示出来)。  
  ——————————————————————————————————————————  
  我想了几个小时了也想不出个好点的算法来。         我是不是太笨了,不是做程序员这块料啊? 问题点数:20、回复次数:21Top

1 楼lzp229(只想飞)(卡卡)回复于 2005-12-15 17:16:42 得分 2

(是将主程序那儿的字符串值顺序倒过来,而不仅仅是倒序显示出来)。  
  按照楼主的要求,你的主程序中应该是定义的数组吧,但是你只传reverse(char   *s)地址,怎么确定字符串什么时候结束呢。。Top

2 楼waini11(王子)回复于 2005-12-15 17:20:44 得分 0

倒叙还不简单Top

3 楼chenang(cha)回复于 2005-12-15 17:25:49 得分 0

一定要用递归吗,直接交换会更快Top

4 楼waterczh(三十年河东三十年河西,我TMD是掉到河里了)回复于 2005-12-15 17:41:50 得分 0

前几天好象有个倒转链表的贴子,可以去看看Top

5 楼waterczh(三十年河东三十年河西,我TMD是掉到河里了)回复于 2005-12-15 18:02:58 得分 0

思考ingTop

6 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2005-12-15 18:07:41 得分 5

#include   "stdio.h"  
  #include   "string.h"  
   
  void   reverse(char   *   s)  
  {  
          int   l   =   strlen(s);  
          char   c   =   s[l-1];  
          memmove(s+1,   s,   l-1);  
          s[0]=c;  
  if   (   *(   s+1)   )       reverse(s+1);  
  }  
   
  main()  
  {  
          char   a[]   =   "abcdef";  
  reverse(a);  
  printf("%s",   a);  
  return   0;  
  }Top

7 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2005-12-15 18:08:31 得分 0

每次把字符串的最后一个字符,移动到最前面  
  然后递归处理子串就是了Top

8 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2005-12-15 18:34:16 得分 5

#include<iostream>  
  #include<algorithm>  
   
  using   namespace   std;  
  char   str_5[12];  
   
  void   reverse_3(char   *str)  
  {  
   
  static   int   count=0;  
   
  if(*str=='\0')  
  {  
  return   ;  
  }  
  else  
  {  
  reverse_3(str+1);  
  cout<<*str;  
  str_5[count++]=*str;  
  }  
  }  
   
  int   main()  
  {  
           
           
  char   str_3[]="yishangshao";  
   
  memset(str_5,0,12);  
   
  reverse_3(str_3);  
  cout<<endl;  
  strcpy(str_3,str_5);  
  cout<<str_3<<endl;  
         
                    system("pause");  
                    return   0;  
  }  
           
  Top

9 楼csucdl(csucdl)回复于 2005-12-15 18:44:36 得分 0

对了,不过思路应该有多种Top

10 楼province_(雍昊)回复于 2005-12-15 19:13:09 得分 0

这个问题用递归简直是杀鸡用牛刀。头尾向中间移动,边移边交换多快啊。Top

11 楼boxer_tony()回复于 2005-12-15 19:39:03 得分 2

#include   <stdio.h>  
  #include   <string.h>  
   
  __inline   void   Swap(char   &a,   char   &b)  
  {  
          char         temp;  
          temp   =   a;  
          a   =   b;  
          b   =   temp;  
  }  
   
  void   Reverse0(char   *str,   int   len)  
  {  
          if(len   <=   1)  
                  return;  
          else  
          {  
                  Swap(str[0],   str[len-1]);  
                  Reverse0(str+1,   len-2);  
          }  
  }  
   
  void   Reverse(char   *str)  
  {  
          int                 len   =   strlen(str);  
          Reverse0(str,   len);  
  }  
  Top

12 楼FarFarAway()回复于 2005-12-15 20:09:49 得分 2

#include   <iostream>  
  #include   <stdio.h>  
  #include   <string>  
  using   namespace   std;  
   
  void   Reverse(   char   *   str,size_t   N   )  
  {  
         
  if   (   N   <=   1   )  
  return;  
  char*   tempStr   =   &str[1];  
  Reverse(   tempStr,   N-2   );  
  char   temp;  
  temp   =   str[0];  
  str[0]   =   str[N-1];  
  str[N-1]   =   temp;  
   
  }  
   
  int   main()  
  {  
        char*   str   =   new   char[25];  
        strcpy(   str,"hello,how   are   you?"   );  
        Reverse(   str,   strlen(   str   )   );  
        cout   <<   str   <<   endl;  
        return   0;  
  }Top

13 楼FarFarAway()回复于 2005-12-15 20:19:02 得分 0

在main()里落下一句:delete   []   str;Top

14 楼ugvihc(maybe good good study, hope day day up!)回复于 2005-12-15 20:38:40 得分 0

直接交换就行了.  
  reverse(char   *s)  
  {  
          strrev(s);  
  }Top

15 楼sinall()回复于 2005-12-15 20:42:00 得分 0

#include   <stdio.h>  
  #include   <string.h>  
   
  char*   reverse(char   *s);  
   
  int   main()  
  {  
          char   str[]   =   "asdf";  
          printf("%s\n",   reverse(str));  
  }  
   
  char*   reverse(char   *s)  
  {  
          if   (*s   !=   '\0')  
          {  
                  char   temp;  
                  temp   =   *(s   +   strlen(s)   -   1);  
                  for   (char   *p   =   s   +   strlen(s)   -   1;   p   >   s;   --p)  
                  {  
                          *p   =   *(p-1);  
                  }  
                  *s   =   temp;  
   
                  reverse(s+1);  
          }  
   
          return   s;  
  }Top

16 楼sinall()回复于 2005-12-15 20:45:17 得分 0

恩,memmove,学习一下……Top

17 楼weping(无语)回复于 2005-12-16 17:55:13 得分 0

谢谢大家热心回复,   学习了!Top

18 楼caokestudy(ck)回复于 2005-12-16 19:12:12 得分 2

#   include   <iostream.h>  
  char   c[]="abcdef";  
  void   cao(int   i)  
  {if   (c[i]!='\0')  
  cao(i+1);  
  cout<<c[i];  
  }  
  void   main()  
  {cao(0);}Top

19 楼chengzanmiao(高薪為共產當多納稅)回复于 2005-12-16 19:28:45 得分 0

happy__888([顾问团]寻开心)  
  ============================================  
  的思路有問題吧。把最后一個拉到第一個,結果還是沒倒序啊。。。Top

20 楼huauh2o(扑克王子)回复于 2005-12-18 21:29:12 得分 2

我的两个基本上一样:  
   
  #include<stdio.h>  
  char*   reverse1(   char   *s   )  
  {  
  char   ch;  
  static   int   i   =   0;  
  static   int   j   =   0;  
  if(   !s[i]   )  
  return   NULL;  
  ch   =   s[i];  
  i++;  
  reverse1(s);  
  s[j++]=   ch   ;  
  return   s;  
   
  }  
  第二个:  
  char*   reverse(   char   *s   )  
  {  
  char   ch;  
  static   char   *q   =   s;  
  static   char   *p   =   s;  
  if(   !*s   )  
  return   NULL;  
  ch   =   *s;  
  reverse(++s);  
  *(q++)   =   ch;  
  return   s;  
  }  
  void   main()  
  {  
  char   test[]=   "hujinshui";    
  puts(reverse(test));  
  }  
  Top

21 楼afei_xyd(阿飞)回复于 2005-12-19 09:05:57 得分 0

happy__888([顾问团]寻开心)  
  的算法没有问题,我试了Top

相关问题

  • 求一递归算法?
  • 递归算法请教
  • C递归算法问题
  • 不用递归的汉挪塔解法!!!
  • 汉若塔的非递归算法???
  • 汉诺塔的非递归算法?
  • 简单的递归算法问题!!
  • 怎么中断递归算法?
  • 高分求一treeview的递归算法!!
  • 用递归实现树 算法

关键词

  • 算法
  • 递归
  • reverse
  • 字符串
  • 倒序
  • 主程序
  • ch
  • strlen
  • temp
  • char

得分解答快速导航

  • 帖主:weping
  • lzp229
  • happy__888
  • sankt
  • boxer_tony
  • FarFarAway
  • caokestudy
  • huauh2o

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo