本文共 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方法1没有考虑到时间和空间的优化,方法2采用了典型的优化策略,交换两个字符。#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);}
转载地址:http://rtuhj.baihongyu.com/