一个c问题,高手帮我看看我怎么错了,急!!

Timmy_Y 2012-04-28 03:39:46
43 子串反向——递归
成绩: 10 / 折扣: 0.8
请编写一个递归函数 reverse(char str[], int start, int end ) ,该函数的功能是将串 str 中下标从 start 开始到 end 结束的字符颠倒顺序。假设 start 和 end 都在合理的取值范围。

例如:

执行前:str[]="0123456";start=1 ;end=4

执行后:strr[]="0432156"

要求在该函数中不使用新的数组,没有循环。


这是题目,然后是我的程序(主要是一种输入不对,就是例如输入0123456,start为0,end为10,希望的输出是6543210,可是我这个输出不来,望高手指点,麻烦啦)
#include<stdio.h>

char *reverse(char str[],int start,int end)
{ char tem;
if(start>=end||str[start+1]>'9'||str[start+1]<'0')
return(str);
else
{ tem=str[start];
str[start]=str[end];
str[end]=tem;
reverse(str,start+1,end-1);
}
if((str[start+1]<='9'&&str[start+1]>='0')&&(str[end]>'9'||str[end]<'0'))
reverse(str,start,end-1);

}
int main()
{
char str[100];
int start,end;
gets(str);
scanf("%d%d",&start,&end);
reverse(str,start,end);
printf("%s\n",str);
return 0;
}

...全文
156 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
muyi66 2012-04-28
  • 打赏
  • 举报
回复
你的程序完全符合题意,没有错。

错的是测试用例,它超出题意范围了。
Timmy_Y 2012-04-28
  • 打赏
  • 举报
回复
忘了说了 ,这个题他主函数已经给了,只让你编写reverse函数,你是不能改主函数的
自信男孩 2012-04-28
  • 打赏
  • 举报
回复
不好意思,有错别字。现改正如下:
如果要求不能使用循环,那么就用数组模拟栈,然后通过栈的特性来实现这个功能了---逆序输出。
nadleeh 2012-04-28
  • 打赏
  • 举报
回复
char *function(char *str,int start,int end)
{
char *c=str;
char *p=str+star;
c=c+end;
char *result=p;
p--;
if (p==c)
return *result;
else
return function(str,start,end-1);
}

数组访问可以用指针,弄清递归返回的条件就可,程序我没测试过 你试试
hen_hao_ji 2012-04-28
  • 打赏
  • 举报
回复

int main()
{
char str[100];
int start,end;
gets(str);
scanf("%d%d",&start,&end);
if(end > strlen(str)) //加这两句
end = strlen(str)-1;
printf("%d", end);
reverse(str,start,end);
printf("%s\n",str);
return 0;
}

自信男孩 2012-04-28
  • 打赏
  • 举报
回复
如果要求没有虚幻,那么就用数组模拟栈,然后通过栈的特性来实现这个功能了---逆序输出。
evencoming 2012-04-28
  • 打赏
  • 举报
回复
if(end>max_length)
end=max_length;
muyi66 2012-04-28
  • 打赏
  • 举报
回复
那就是题目测试例子错了。
Timmy_Y 2012-04-28
  • 打赏
  • 举报
回复
我这是学校的题目 题目测试例子就是有这样的例子....
c_losed 2012-04-28
  • 打赏
  • 举报
回复
假设 start 和 end 都在合理的取值范围。
muyi66 2012-04-28
  • 打赏
  • 举报
回复
你应该输入的是:
0123456
0 6
一共才7个字符,你把end输入为10当然要出错。而且也是违背题意的:“假设 start 和 end 都在合理的取值范围

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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