疯狼算法日记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方法,可以将两个迭代器之间的元素进行逆序排列,可以说是现成的逆序算法,我们只需要将两个迭代器指到字符串开始和最后就好了,都不用自己写了,很方便吧~
好啦,今天就到这里,明天会以此为基础,讲述更有技巧的东西~

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 总留鼻涕水怎么办 流像水一样的鼻涕怎么办 出门忘记带洗面奶怎么办 一侧鼻子流清水怎么办 慢性肠胃炎犯了怎么办 儿子拉肚肚子疼怎么办 皮肤太容易过敏怎么办 过敏脸一直不好怎么办 脸上突然过敏怎么办急救 脸过敏发红疼怎么办 脸上突然过敏了怎么办 脸过敏总反复怎么办 用蜂蜜洗脸过敏怎么办 脸上涂蜂蜜过敏怎么办 孕晚期脸过敏怎么办 吃芒果脸过敏怎么办 脸上老反复过敏怎么办 用什么都过敏怎么办 脸上起过敏湿疹怎么办 脸上发湿疹过敏怎么办 感冒流鼻涕有痰怎么办 咳嗽流清水鼻涕怎么办 脸最近老是过敏怎么办 鼻炎脸特别疼怎么办 宝宝感冒一直流鼻涕怎么办 经常过敏的体质怎么办 一边鼻子堵了怎么办 鼻炎流清水鼻涕怎么办 鼻子总感觉堵塞怎么办 半边鼻子不通气怎么办 鼻炎感冒了鼻塞怎么办 左边鼻子不通气怎么办 婴儿鼻塞不通气怎么办 过敏性鼻炎一直打喷嚏怎么办 一只鼻子流鼻涕怎么办 一个鼻子不通气怎么办 夏天鼻子堵了怎么办 做完鼻子感冒了怎么办 鼻子不通流鼻涕打喷嚏怎么办 一岁半宝宝流鼻涕鼻塞怎么办 没有感昌流鼻涕怎么办