一个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);
}
数组访问可以用指针,弄清递归返回的条件就可,程序我没测试过 你试试
[解决办法]
你的程序完全符合题意,没有错。
错的是测试用例,它超出题意范围了。