递归实现字符串反转char* reverse(char* str)合集

先看到的是一个递归输出的,不满足要求

void ret_str(char* s)
{
    if(*s != '/0')
    {
     ret_str(s+1);
    }
   cout<<*s;
}

 

找到的比较好的两种方法,没有static变量,线程安全

char* reverse(char* str){ int len = strlen(str); char tmp = str[len - 1]; if (len <= 1) return str; str[len - 1] = '/0'; reverse(str + 1); str[len - 1] = str[0]; str[0] = tmp; return str; } 下面两种算一种思想 void reverse(char *s) { if (*s) { char *p = s; char c = s[0]; do {*p = *(p+1); p++;}while(*p); reverse(s); s[strlen(s)] = c; } } char* reverse1(char *s) { if (*s) { int i; char c; i = strlen(s) - 1; c = s[i]; s[i] = 0; reverse1(s); for (i = strlen(s); i > 0 ; i--) s[i] = s[i-1]; s[0] = c; } return s; }

 

 

还有其他方法

void StrRev( char *str ) { if ( *(str) && *(str+1) ) { StrRev( str+1 ); while ( *(str+1) ) { *str ^= *(str+1); *(str+1) ^= *str; *(str) ^= *(str+1); str++; } } } char *reverse(char *str) { static int stk; static char *s; if(!stk) s = str; stk++; if(*str) { char *p = str, t = *p; while(p > s) { *p = *(p-1); p--; } *p = t; reverse(str+1); } stk--; return str; } void reverse(char *str) { char *tmp; int i; int len; char c; int add; len = strlen(str); if(len < 1) return; if(len&1) { add = len/2+1; } else { add = len/2; } tmp = str + add; reverse(tmp); for(i=0;i<len/2;i++) { c = str[i]; str[i] = str[i+add]; str[i+add] = c; } reverse(tmp); }

 

转载于:https://www.cnblogs.com/marryZhan/archive/2010/09/28/2213938.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值