博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
优化版 字符串翻转
阅读量:3523 次
发布时间:2019-05-20

本文共 1008 字,大约阅读时间需要 3 分钟。

方法1:(普通版)

#include 
#include
#include
void rever(char* src,char* out_put){ int i = 0; char *res = src; int len = strlen(res); while(*res != '\0') { out_put[len - i - 1] = *res; res++; i++; } out_put[len] = '\0';}int main(int argc,char** argv){ char *res = (char*)malloc(1024); memset(res,0,1024); rever(argv[1],res); printf("%s\n",res); free(res);}

 

方法2:(优化版)

 

#include 
#include
#include
char* rever(const char* src){ char* tmp = (char*)malloc(strlen(src) + 1); strcpy(tmp,src); /* * ret 用于返回结果 * */ char* ret = tmp; /* * 初始的时候就让指针p指向传入的字符串的最后一个字符 * 即'\0'前面的一个字符 * */ char* p = tmp + strlen(src) - 1; /* * 因为指针p所指向的地址比tmp更大,所以可以这样比较 * */ while(p > tmp) { /* * 交换p和tmp所指向的字符 * */ *p ^= *tmp; *tmp ^= *p; *p ^= *tmp; /* * 移动指针 * */ --p; ++tmp; } /* * 最后返回翻转后的结果 * */ return ret;}int main(int argc,char** argv){ char* res = rever(argv[1]); printf("res = %s\n",res);}

 

方法1没有考虑到时间和空间的优化,方法2采用了典型的优化策略,交换两个字符。

转载地址:http://rtuhj.baihongyu.com/

你可能感兴趣的文章
发布/订阅模式 vs 观察者模式
查看>>
es5中的arguments对象
查看>>
git本地仓库和远程仓库关联,分支重命名
查看>>
js对象的深拷贝,你真的觉得很简单吗?
查看>>
你真的了解map方法吗?手动实现数组map方法。
查看>>
带你手动实现call方法,让你收获满满
查看>>
前端知识体系
查看>>
查找入职员工时间排名倒数第三的员工所有信息
查看>>
使用join查询方式找出没有分类的电影id以及名称
查看>>
Qt教程(2) : Qt元对象系统
查看>>
驱动开发误用指针错误:Unable to handle kernel NULL pointer dereference at virtual address
查看>>
Linux部署DocSystem知识/文件管理系统
查看>>
Centos7开机自启动脚本无法使用备用方案
查看>>
jvm虚拟机内存详解
查看>>
线程的创建方式
查看>>
DNS是什么
查看>>
mapreduce自定义分组、自定义分区、二次排序
查看>>
Hbase架构
查看>>
spark运行模式
查看>>
PaddleX的C++使用
查看>>