zoukankan      html  css  js  c++  java
  • [九度][何海涛] 翻转单词顺序

    题目描述:
    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

    先反转整个句子,再对每个单词反转
     1 #include <iostream>
     2 using namespace std;
     3 
     4 void reverse(string &s, int beg, int end)
     5 {
     6     if (beg >= end)
     7         return;
     8 
     9     while(beg < end)
    10     {
    11         char c = s[beg];
    12         s[beg] = s[end];
    13         s[end] = c;
    14         beg++;
    15         end--;
    16     }
    17 }
    18 
    19 int main()
    20 {
    21     string s;
    22     while(getline(cin, s))
    23     {
    24         reverse(s, 0, s.size()-1);
    25         int start = 0;
    26         for(int i = 0; i < s.size(); i++)
    27         {
    28             if (s[i] == ' ')
    29             {
    30                 reverse(s, start, i - 1);
    31                 start = i + 1;
    32             }
    33         }
    34 
    35         reverse(s, start, s.size() - 1);
    36 
    37         cout << s << endl;
    38     }
    39 }
  • 相关阅读:
    google
    学习Linux第六天
    对比教学大纲
    周 记
    《世界是数字的》读后感
    《我是一只IT小小鸟》读后感
    前端小知识
    JavaScript 执行机制
    执行栈和任务队列
    支付宝前端员工培训手册
  • 原文地址:https://www.cnblogs.com/chkkch/p/2784133.html
Copyright © 2011-2022 走看看