编写字符串反转函数strrev
2017-07-18 16:13
423 查看
问题
编写字符串反转函数:strrev。要求时间和空间效率都尽量高。测试用例:输入“abcd”,输出应为“dcba”;
解法1 遍历字符串,一头一尾交换
代码
解法2 指针操作交换
代码
解法3 异或交换
代码
解法4 加减法交换
代码
解法5 递归交换
代码
编写字符串反转函数: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); }
相关文章推荐
- 编写字符串反转函数mystrrev(题目来源:中国大学mooc网---西安交大-计算机程序设计)
- C++编写字符串反转函数mystrrev(来源:西安交通大学-计算机程序设计-中国大学MOOC)
- 编写字符串反转函数 .
- 用C语言实现字符串反转函数strrev的经典方法
- 用C语言实现字符串反转函数strrev的经典方法
- 编写字符串反转函数的5种方法
- for循环的使用 反转字符串,手写strrev()函数 解决问题
- 编写字符串反转函数mystrrev
- 用Java编写函数反转字符串
- 编写字符串反转函数mystrrev
- strrev()字符串反转函数
- strrev 字符串反转函数
- 编写字符串反转函数
- 使用C/C++编写函数,实现字符串反转,要求不使用任何系统函数,且时间复杂度最小
- 编写字符串反转函数 - 小小外星人的技术博客 - 博客频道 - CSDN.NET
- 4.2题目: 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
- 编写函数void change(char *a,char *b,char*c)。 函数功能是首先把b指向的字符串逆向存放,然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中,两个字
- 4. 编写函数,使字符串中尾部的*号不得多于n个
- 编写函数void change(char *a,char *b,char*c)。 函数功能是首先把b指向的字符串逆向存放,然后将a指向的字符串和b指向的字符串按排列顺序交叉合并到c指向的数组中,两个字
- 要求:不申请变量和空间 反转字符串 ,用一个函数实现。 异或^交换或者加减交换的典型应用! VIA 笔试题