疯狼算法日记0001-字符串逆序
来源:互联网 发布:二维数组动态分配内存 编辑:程序博客网 时间:2024/06/02 19:09
开篇算法非常简单,就是实现将一个字符串逆序的功能,虽然逻辑很好写,但是里面的细节还是大大的有呀~
大家不要小看这个算法,后面连续几个算法都是基于此的哦~
题目要求就是将一个字符串逆序输出;
非常基础,先看代码~
#include<iostream>#include<cstdlib>#include<cstring>#include<string>#include<stdio.h>using namespace std;char * rev_str(char * str){ int len = strlen(str); for(int i = 0; i < len/2; i++) { swap(str[i], str[len-i-1]); } return str;}int main(int argc, char ** argv){ char str_array[] = "12345"; rev_str(str_array); printf("%s\n",str_array); system("pause"); return 0;}
这里面还是有些文章的。
首先传入的不能是char * 类型,只能是char []类型,新手经常犯这个错误,因为一般大学老师在讲指针的时候为了突出数组和指针的关系,总是说这两个是等价的,然而,在其他条件下,这两个即便是等价,也是编译器在里面做了一些工作使其等价的。
这个是因为char * 类型的数组大小是不定的,而char []类型的定长的。char[]是一个数组定义,char*是指针定义,这里面还有很多知识,具体请参考这篇文章,说得十分详细:
http://blog.csdn.net/yahohi/article/details/7427724
还有就是算法的优化,将算法优化在O(n/2),做法就是从首尾开始,向中间推进直到中间,这样整个字符串就被逆序了。
有一种比较好的方法解决char * 和char[]的问题,就是使用C++的string类型,这样整个字符串就是一个变量,就不涉及数组、指针这种复杂的问题了:
#include<iostream>#include<cstdlib>#include<cstring>using namespace std;void rev_str(string & str){ int len = strlen(str.c_str()); for(int i = 0; i < len/2; i++) { swap(str[i],str[len-i-1]); } return;}int main(){ string str; cin >> str; rev_str(str); cout << str <<endl; system("pause"); return 0;}
个人还是偏向C++,很多地方真的很方便,虽然本日记目前不太涉及面向对象的内容~
另外,熟练使用stl模板库也是很加分的一种方法:
#include<iostream>#include<vector>#include<algorithm>#include<cstdlib>#include<cstring>using namespace std;void rev_str(vector<char> & v){ reverse(v.begin(), v.end()); return;}int main(int argc, char ** argv){ vector<char> v(10); string str; cin >> str; for(int i = 0; i < strlen(str.c_str()); i++) { v.push_back(str[i]); } rev_str(v); for(vector<char>::iterator it = v.begin(); it != v.end(); ++it) { cout << *it; } cout<<endl; system("pause"); return 0;}
vector有一个reverse方法,可以将两个迭代器之间的元素进行逆序排列,可以说是现成的逆序算法,我们只需要将两个迭代器指到字符串开始和最后就好了,都不用自己写了,很方便吧~
好啦,今天就到这里,明天会以此为基础,讲述更有技巧的东西~
- 疯狼算法日记0001-字符串逆序
- 疯狼算法日记0003-句子逆序
- 疯狼算法日记0002-句子中每个单词逆序
- 字符串逆序算法实现
- 算法训练 字符串逆序
- 算法训练 字符串逆序
- 算法训练 字符串逆序
- 算法训练 字符串逆序
- 字符串逆序的算法汇总
- 字符串按单词逆序算法
- 字符串逆序输出的简单算法
- 【算法之道】之字符串逆序输出
- 递归算法实现字符串的逆序存储
- 递归算法实现字符串的逆序输出
- 递归算法实现字符串的逆序存储
- 蓝桥杯 ALGO-69 算法训练 字符串逆序
- 蓝桥杯 ALGO-69 算法训练 字符串逆序
- 用递归算法实现逆序字符串
- 【LeetCode】 199. Binary Tree Right Side View
- Sort
- Go语言中defer的调用顺序简单测试代码
- 二叉树的性质及相关证明
- 问题五十八:怎么用ray tracing画conic sweeping图形
- 疯狼算法日记0001-字符串逆序
- 系统学习《统计自然语言处理》
- zookeeper-3.4.9集群安装
- 利用NumPy和pandas对CSV文件进行写操作
- 2017.01.16 第一篇博客
- linux学习笔记1——指令的基本格式及基本文件操作
- 程序员面试金典——解题总结: 9.17中等难题 17.2判断井字游戏中某个玩家是否赢了游戏
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- Fortran语言初探及Win7 64位下Fortran开发环境配置