字符串处理-----字符串反转

来源:互联网 发布:局域网上网监控软件 编辑:程序博客网 时间:2024/06/16 14:21
请原谅博主今天很闲,于是乎博主又开始更新微博了。
这次要更新的问题是:
编写一个函数,反转一个单词的顺序。例如:"Do or do not, there is no try."就要反转成"try.no is there not, do or Do".
大家要认真看看这道题,这道题和大家想象的貌似有点不同。首先字符串反转,大家只要从逆序读出数据然后再填充进来就可以了。但是,但是,这道题大家看看,如果用这种思路的话就会出现一个问题:反转出来结果就变成了".ytron si ereht ,ton od rooD".一旦全部反转的话,单词就变得不像是单词了。所以这道题就是要反转句子,并且单词不能反转。
其实思考到这里距离答案已经很接近了,因为大家只要再认真想一想就知道了,再将单词反转就可以了。
好的,这就是这道题最终的思考。先将句子反转,再将单词反转,这样两次反转之后单词就会正序,而句子的循序就会被反转。
好了,上代码。
这次的代码博主也是比较偷懒了,写了很多东西都用stl中的一些内容替代了。。。毕竟写起来真的还是很麻烦的。
// blog_resverse_string.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include
#include
#include
using namespace std;
void reverse_method(string& str)
{
reverse(str.begin(),str.end());//algorithm中的reverse可以直接将range中的内容反转,让楼主很省心。所以这句话就是将string中的内容全部反转
//_reverse_method(str);
string::iteratorfront_iter,back_iter;//定义两个迭代器,主要是为了将单词的位置找出来
back_iter=str.begin();
//cout<<typeid(*back_iter).name()<<endl;
char target=' ';//单词已空格分隔,所以target就是我们需要在字符串中搜寻的目标
for(front_iter=find(str.begin(),str.end(),target);front_iter!=str.end();front_iter=find(back_iter,str.end(),target))//使用algorithm中的find,可以在指定的容器范围内找到指定的value,如果没找到就会返回结尾,str.end()
{
reverse(back_iter,front_iter);//找到单词分隔的地方,然后将单词反转
back_iter=front_iter+1;
}
reverse(back_iter,str.end());//最后一个单词是没有空格的,所以直接反转
}
int main()
{
string str("Do or do not, there is no try.");
cout<<"init string: "<<str<<endl;
reverse_method(str);
cout<<"reserve string: "<<str<<endl;
return 0;
}
程序结果:
传了很久的图片都穿不上来,看来新浪博客大姨妈了。
那么只能博主告诉各位最后反转出来的结果是:
try. no is there not, do orDo

原创粉丝点击