字符串反转操作汇总
2013-10-24 15:40
330 查看
//不用任何C语言函数:strlen,cout ,strcpy,
char * strrev ( char * str )
{
char *start = str;
char *left = str;
char ch;
while (*str++) ; /* find end of string */
str -= 2;
while (left < str)
{
ch = *left;
*left++ = *str;
*str-- = ch;
}
return(start);
}
解法一:第一次看到这题目,想到最简单、最直觉的解法就是:遍历字符串,将第一个字符和最后一个交换,第二个和倒数第二个交换,依次循环,即可,于是有了第一个解法: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; } |
char* strrev2(const char* str) { // char* tmp = new char[strlen(str) + 1]; // strcpy(tmp,str); // char* ret = tmp; char *ret =str; char* p = tmp + strlen(str) - 1; while (p > tmp) { char t = *tmp; *tmp = *p; *p = t; --p; ++tmp; } return ret; } |
解法三的实现代码为:
char* strrev3(const char* str) { char* tmp = new char[strlen(str) + 1]; strcpy(tmp,str); char* ret = tmp; char* p = tmp + strlen(str) - 1; while (p > tmp) { *p ^= *tmp; *tmp ^= *p; *p ^= *tmp; --p; ++tmp; } return ret; } |
char* strrev4(const char* str) { char* tmp = new char[strlen(str) + 1]; strcpy(tmp,str); char* ret = tmp; char* p = tmp + strlen(str) - 1; while (p > tmp) { *p = *p + *tmp; *tmp = *p - *tmp; *p = *p - *tmp; --p; ++tmp; } return ret; } |
char* strrev5(/*const */char* str,int len) { if (len <= 1) return str; char t = *str; *str = *(str + len -1); *(str + len -1) = t; return (strrev5(str + 1,len - 2) - 1); } |
int main(int argc,char* argv[]) { char* str = "hello"; P(str); char* str2 = strrev1(str); P(str2); char* str3 = strrev2(str2); P(str3); char* str4 = strrev3(str3); P(str4); char* str5 = strrev4(str4); P(str5); char* str6 = strrev5(str5,strlen(str5)); P(str6); return 0; } |
说明:1)这里解法中没有认真考虑输入字符串的合法性和特殊长度(如NULL、一个字符等)字符串的处理;2)前4个算法不改变输入字符串的值,解法五修改了输入字符串。
相关文章推荐
- String 字符串操作、比较、查找字符、替换、反转、分割等
- SQL字符串操作汇总
- SQL字符串操作汇总
- LINUX C 字符串操作函数接口 汇总
- 字符串操作汇总-持续更新中
- C# 格式化字符串,日期,字符串操作汇总
- 面试基础_01字符串反转操作
- SQL字符串基本操作汇总
- Java字符串操作汇总
- 学习锐浪报表之MySQL连接字符串的实际操作步骤汇总
- SQL字符串操作汇总[记住这个]---select substring(quantityperunit,charindex('-',quantityperunit)+1,100) as 结果 from products
- 字符串的基本操作 汇总
- C语言字符串操作汇总
- java字符串操作:如何实现字符串的反转及替换?
- python_11(format、转义字符、连接字符、字符串操作函数、字符串反转)
- sql 获取字符串长度SQL字符串操作汇总
- 字符串操作汇总 C/C++
- Python中字符串反转的一个简单操作
- C字符串操作:字符串反转