剑指OFFER之翻转单词顺序

题目描述:
JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
输入:

每个测试案例为一行,表示一句英文句子。

我们保证一个句子的单词数不会超过600,每个单词的长度也不会超过30。但是需要注意的是Fish是个不拘小节的人,有时候两个单词中间可能会有很多空格。为了方便起见,你可以认为一行的字符总数不会超过50000个,标点符号可以和普通字母一样处理。

输出:
对应每个测试案例,把翻转后的正确的句子单独输出一行。
样例输入:
student. a am I
I‘m a Freshman and I like JOBDU!
样例输出:
I am a student.
JOBDU! like I and Freshman a I‘m

Code:
#include <iostream>
#include <stack>

using namespace std;

int main()
{
    string str;
    string seperator(" ");
    stack<string> words;
    while(getline(cin,str)){
        string::size_type startPos=0,endPos=0;
        while(words.empty()==false)
            words.pop();
        while((startPos=str.find_first_not_of(seperator,endPos))!=string::npos){
            int spaceNum=startPos-endPos;
            int cnt=1;
            while(cnt<=spaceNum){
                words.push(string(" "));
                ++cnt;
            }
            endPos=str.find_first_of(seperator,startPos);
            string word;
            word.assign(str,startPos,endPos-startPos);
            words.push(word);
        }
        while(words.empty()==false){
            string tmpWord=words.top();
            words.pop();
            cout<<tmpWord;
        }
        cout<<endl;
    }
    return 0;
}

/**************************************************************
    Problem: 1361
    User: lcyvino
    Language: C++
    Result: Accepted
    Time:260 ms
    Memory:1656 kb
****************************************************************/

时间: 2024-10-14 18:29:54

剑指OFFER之翻转单词顺序的相关文章

【剑指offer】翻转单词顺序

转载请注明出处:http://blog.csdn.net/ns_code/article/details/27372033 题目描写叙述: JOBDU近期来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看.但却读不懂它的意思.比如,"student. a am I".后来才意识到.这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.". Cat对一一

【Java】 剑指offer(58-1) 翻转单词顺序

  本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字母一样处理.例如输入字符串"I am a student. ",则输出"student. a am I". 思路 一开始自己觉得要用split()方法,但这要开辟新的数组,占内存空间,不行. 首先实现翻转整个句子:只需要在首尾两端各放置一个

【剑指offer】翻转单词顺序,C++实现

原创博文,转载请注明出处! # 题目 # 思路         两次翻转,首先整个句子翻转,然后单词翻转. # 代码 原文地址:https://www.cnblogs.com/wanglei5205/p/8976617.html

[剑指Offer] 44.翻转单词顺序列

题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,"student. a am I".后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是"I am a student.".Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? [思路]先把由空格分割的每个字符串翻转,最后翻转整个字符串. 1 class Solution

剑指OFFER之调整数组顺序使奇数位于偶数前面找(九度OJ1516)

题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 输入: 每个输入文件包含一组测试案例.对于每个测试案例,第一行输入一个n,代表该数组中数字的个数.接下来的一行输入n个整数.代表数组中的n个数. 输出: 对应每个测试案例,输入一行n个数字,代表调整后的数组.注意,数字和数字之间用一个空格隔开,最后一个数字后面没有空格. 样例输入: 5 1 2 3 4 5 样例输

【剑指offer】调整数组顺序

转载请注明出处:http://blog.csdn.net/ns_code/article/details/25829395 剑指offer上的第14题,九度OJ为了确保输出的结果的唯一性,在输出上做了修改,因此采用的方法自然与书本上不同,这里没有限制,思来想去还是用最简单的方法来做了,非常简单的方法,直接上代码. 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.

剑指offer 按之字形顺序打印二叉树

题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 思路: 1.有了之前层次遍历一行一行输出的经验,我们可以直接用一个变量记录行数,如果是奇数行,就将队列中的元素按顺序所有保存下来,如果是偶数行,就顺序保存到一个临时vector中,再逆序保存下来. 1 /* 2 struct TreeNode { 3 int val; 4 struct TreeNode *left; 5 struct Tre

剑指offer之调整数组顺序使奇数位于偶数前面

题目要求: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 解题方法: 方法一:时间复杂度O(n^2) 最容易想到:从头扫描这个数组,每碰到一个偶数时,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位.挪完之后在数组的末尾有一个空位,这时把该偶数放入这个空位: 方法二:时间复杂度O(n) 重新建立一个向量,然后进行两次扫描:第一次扫描奇数,第二次扫描偶数,完毕,不

【剑指offer】调整数组顺序使奇数位于偶数前面

题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 思路:要想原有的次序相对不变,只能相邻交换或顺次移动.冒泡排序:一发现相邻的两个,前一个是偶数,后一个是奇数,则交换. public class ReOrderArrayClass { public void reOrderArray(int[] array) { for (int i = 0; i < array.l