标题:递归实现逆序的小问题
只看楼主
Dream_weaver
Rank: 1
等 级:新手上路
帖 子:37
专家分:2
注 册:2012-6-8
结帖率:100%
已结贴  问题点数:20 回复次数:4 
递归实现逆序的小问题
int main(void)
{
    char str[80];
    puts("Enter a string:");
    gets(str);
    inverse(str);  
    return 0;
}
void inverse(char * str)
{
    if(*str !='\0')
        inverse(str+1);

    putchar(*(str-1));//这里还是有点问题的?
   
}

 如果putchar(*str)  输出的逆序字符串的首位会多出一个空格,为什么会是空格呢?最后*str不是等于'\0'吗?
如果 putchar(*(str-1)) 输出是正确的逆序,可是我在想,*str的首位前面的一位不是也应该有输出吗?就是说*str-1应该会有乱码吧?
搜索更多相关主题的帖子: void return 字符串 Enter 
2013-03-09 17:15
yuccn
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:12 
1 如果putchar(*str)  输出的逆序字符串的首位会多出一个空格,为什么会是空格呢?最后*str不是等于'\0'吗?

你查下putchar(0);就行了


2 如果 putchar(*(str-1)) 输出是正确的逆序,可是我在想,*str的首位前面的一位不是也应该有输出吗?就是说*str-1应该会有乱码吧?

可能输出了一个不可见字符吧,那就看函数栈中 在str 前面的一个字节空间是什么数据了


这样写本身就有逻辑错误的

我行我乐
我的博客:
http://blog.yuccn. net
2013-03-09 17:41
tompobing
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:260
专家分:809
注 册:2012-12-9
得分:8 
#include <stdio.h>
 void inverse(char * str)
 {
     if(*(str+1) !='\0')    //这里给楼主改了下
         inverse(str+1);
 
    putchar(*str);
     
}
int main(void)
 {
     char str[80];
     puts("Enter a string:");
     gets(str);
     inverse(str);  
     return 0;
 }
2013-03-11 13:57
Dream_weaver
Rank: 1
等 级:新手上路
帖 子:37
专家分:2
注 册:2012-6-8
得分:0 
回复 3楼 tompobing
貌似可行,至少看上去是
2013-03-13 15:46
小菜B
Rank: 2
等 级:论坛游民
帖 子:29
专家分:25
注 册:2013-3-6
得分:0 
三楼的如果什么也不输入就会出现乱码了
2013-03-13 17:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-400275-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.068036 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved