首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个c有关问题,高手帮小弟我看看小弟我如何错了,

2012-05-01 
一个c问题,高手帮我看看我怎么错了,急!!43 子串反向——递归成绩: 10 / 折扣: 0.8请编写一个递归函数 revers

一个c问题,高手帮我看看我怎么错了,急!!
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;
}



[解决办法]
如果要求没有虚幻,那么就用数组模拟栈,然后通过栈的特性来实现这个功能了---逆序输出。
[解决办法]

C/C++ code
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;}
[解决办法]
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);
}

数组访问可以用指针,弄清递归返回的条件就可,程序我没测试过 你试试
[解决办法]
你的程序完全符合题意,没有错。

错的是测试用例,它超出题意范围了。

热点排行