您的位置:首页 > 其它

编写字符串反转函数strrev

2017-07-18 16:13 423 查看
问题

编写字符串反转函数:strrev。要求时间和空间效率都尽量高。测试用例:输入“abcd”,输出应为“dcba”;

解法1 遍历字符串,一头一尾交换

代码

char * strrev1(const char* str)
{
int len = strlen(str);
char* tmp = new char[len+1];
strcpy(tmp,str);
for(int i = 0;i<len/2;i++)
{
char c = tmp[i];
tmp[i] = tmp[len-i-1];
tmp[len-i-1] = c;
}
return tmp;
}


解法2 指针操作交换

代码

char *strrev2
d0c7
(const char *str)
{
char *temp = new char[strlen(str)+1];
strcpy(temp,str);
char * ret = temp;
char * p = temp+strlen(str)-1;
while(p>temp)
{
char t = *temp;
*temp = *p;
*p = t;

--p;
++temp;
}
return ret;
}


解法3 异或交换

代码

char *strrev3(const char * str)
{
char * temp = new char[strlen(str)+1];
strcpy(temp,str);
char *ret=temp;
char *p = temp+strlen(str)-1;

while(p>temp)
{
*p^=*temp;
*temp^=*p;
*p^=*temp;

--p;
++temp;
}
return ret;
}


解法4 加减法交换

代码

char *strrev4(const char * str)
{
char * temp = new char[strlen(str)+1];
strcpy(temp,str);
char *ret=temp;
char *p = temp+strlen(str)-1;

while(p>temp)
{
*p =*p + *temp;
*temp=*p - *temp;
*p =*p - *temp;

--p;
++temp;
}
return ret;
}


解法5 递归交换

代码

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