编写字符串反转函数strrev

来源:互联网 发布:只差一个程序员了 编辑:程序博客网 时间:2024/06/08 14:59

问题
编写字符串反转函数: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(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);}
原创粉丝点击