注册 登录
编程论坛 C++教室

关于翻转字符

shfe 发布于 2013-04-20 16:27, 452 次点击
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;
2 回复
#2
peach54602013-04-20 17:47
数组下标从几开始?
#3
zhuxiaoneng2013-04-22 12:22
回复 楼主 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(不反转的情况)
1