c++编程题 句子反转

呼转眼周三也要过去啦。今天在实验室终于装好了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(注意空格)。于是改成了上面的,即直接比较指针,具有唯一性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值