您的位置:首页 > 其它

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

2010-09-28 17:50 477 查看
先看到的是一个递归输出的,不满足要求

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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐