实现字符串翻转

ice119103 2002-11-17 07:33:46
#include<iostream.h>
#include<string.h>
int i;
char * reverse(char *s)
{char t[100];
char *q;
q=t;
*(q+i--)=*s;
if(i==0) return q;
if(i!=0) reverse(s++);
}

void main()
{char a[100];
char *p;
p=a;
cout<<"输入要翻转的字符串:";
cin>>p;
i=strlen(p);
cout<<"翻转结果是:"<<reverse(p);
}
要求使用递归,请帮我看看错在哪里?
...全文
180 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ice119103 2002-11-17
  • 打赏
  • 举报
回复
我已经解决了,谢谢各位!
zhizhuwang 2002-11-17
  • 打赏
  • 举报
回复
char* reverse(char *s,int len)
{
if(len<=1) return s;
char temp=s[0];
s[0]=s[len-1];
s[len-1]=temp;
s++;//已经将首尾两个调换位置,只需对中间的N-2个进行递归处理,所以 LEN 应该减2,而S应该后移一次, iicup(双杯献酒) 写的不错
len--;
len--;
reverse(s,len);
return s;
}
cmsoft 2002-11-17
  • 打赏
  • 举报
回复
对,返回的地址有问题
xunknown 2002-11-17
  • 打赏
  • 举报
回复
char * reverse(char *s)
{char t[100];
char *q;
q=t;
*(q+i--)=*s;
if(i==0) return q;////返回局部变量的地址,肯定不幸!!!!!!!
if(i!=0) reverse(s++);
}
ice119103 2002-11-17
  • 打赏
  • 举报
回复
len 为什么要减两次呢?
双杯献酒 2002-11-17
  • 打赏
  • 举报
回复
参考以下程序:

#include<iostream.h>
#include<string.h>

int i;
char* reverse(char *s,int len)
{
if(len<=1) return s;
char temp=s[0];
s[0]=s[len-1];
s[len-1]=temp;
s++;
len--;
len--;
reverse(s,len);
return s;
}

void main()
{char a[100];
char *p;
p=a;
cout<<"输入要翻转的字符串:";
cin>>a;
reverse(p,strlen(a));
cout<<"翻转结果是:"<<p<<endl;;
}

//运行结果:

输入要翻转的字符串:1234567890
翻转结果是:0987654321


ice119103 2002-11-17
  • 打赏
  • 举报
回复
我的数组初始化是通过指针实现的不需要
改成char a[100]="abcdefgh";
双杯献酒 2002-11-17
  • 打赏
  • 举报
回复
极度不赞成把 i 做成全局变量。
双杯献酒 2002-11-17
  • 打赏
  • 举报
回复
char a[100];
应该
char a[100]="abcdefgh";

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧