呼转眼周三也要过去啦。今天在实验室终于装好了python2.7 + opencv3.2 + caffe环境,成功跑起minist和师姐的代码,胸中一块大石终于落下..不得不吐槽下实验室的电脑太坑了,别人留下来的果然没好东西hhh各种东西又杂又乱,卸了安安了卸我真是配环境配吐了,每天不知道在干啥。好在终于结束了,接下来才是难关啊开始我的mtcnn之旅! -
好了进入正题,今天做了一道句子反转的题,巩固了矢量的运用,顺带学习下迭代器,还遇到几个坑。
题目描述
给定一个句子(只包含字母和空格),将句子中的单词位置反转,单词用空格分割,单词之间只有一个空格,前后没有空格。比如:(1)“hello xiao mi” - >“ mi xiao你好“
输入描述:
输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)
输出描述:
对于每个测试示例,要求输出句子中单词反转后形成的句子
示例1
输入
hello xiao mi
输出
mi xiao hello
代码如下:
//
// main.cpp
// c++
//
// Created by Maggie on 18/7/23.
// Copyright © 2018年 Maggie. All rights reserved.
//
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(void){
vector<string> str;
string temp;
char c;
while((c=cin.get())!='\n'){ //回车结束输入
cin.unget();
cin>>temp;
str.push_back(temp); //顺序存储
}
//迭代器(逆序)输出
for (vector<string>::reverse_iterator it = str.rbegin(); it != str.rend(); ++it)
{
if( it == str.rend()-1) cout<<*it; //如果是最后一个,不输出“ ”(见题目要求)
else cout << *it << " ";
}
return 0;
}
主要有三点:
1,回车结束输入。
刚开始是这么写的:
while(cin>>temp){
str.push_back(temp);
}
后来发现输入结束不了,程序一直在等待(经过设置断点后可以输出发现此问题)
所以百度了一下方法,如上面所示用cin.get()和cin.unget()来控制, '\ n' 表示换行符。
2,迭代器(逆序输出)
两种方法,如下图:
3,对最后一个输出字符串的处理(如题目要求,后面没有'')
if( it == str.rend()-1) cout<<*it; //如果是最后一个,不输出“ ”(见题目要求)
这里遇到个坑,起初是这么写的:
if( *it == *(str.rend()-1)) cout<<*it;
即用指针指向的值去比较,如果相等就不输出'',但是网站的一个测试样例abcd abcd发现了我的错误 - 这种情况会输出abcdabcd(注意空格)。于是改成了上面的,即直接比较指针,具有唯一性。