| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 438 人关注过本帖
标题:关于翻转字符
只看楼主 加入收藏
shfe
Rank: 1
等 级:新手上路
帖 子:17
专家分:5
注 册:2013-2-24
结帖率:66.67%
收藏
 问题点数:0 回复次数:2 
关于翻转字符
char *reverse5(char *str,int len)   
{
if(len<=1)
return str;

char t=*str;                //头尾两个指针指向调换
*str=*(str+len-1);
*(str+len-1)=t;

return(reverse5(str+1,len-2)-1);//中间位置字符用递归完成
}
reverse5(str+1,len-2)-1式子中为什么要减1;
2013-04-20 16:27
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
数组下标从几开始?

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-04-20 17:47
zhuxiaoneng
Rank: 4
等 级:业余侠客
威 望:2
帖 子:51
专家分:215
注 册:2013-4-10
收藏
得分:0 
回复 楼主 shfe
reverse5(str+1,len-2)-1式子中为什么要减1;
因为函数每次递归的时候,都str都+1,如果你不-1的话,最后返回的str就不指向字符串的开始处
程序代码:
char *reverse5(char *str,int len)    
{
    if(len<=1)
        return str;

    return(reverse5(str+1,len-2));//中间位置字符用递归完成
}

int main()
{   
    char a[] = "12345";
    cout << reverse5(a, sizeof(a) / sizeof(char) - 1) << endl; 
    return 0;
}


函数会递归调用两次,每次str+1
不复位的情况下,str指向str + 2,也就是指向3了,返回345
复位的情况下,  str加了多少个1,就减少多少个1,那么str还是指向str的开始处,也就是1的位置,返回的是12345(不反转的情况)
2013-04-22 12:22
快速回复:关于翻转字符
数据加载中...
 
   



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

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