zoukankan      html  css  js  c++  java
  • 【剑指Offer面试编程题】题目1361:翻转单词顺序--九度OJ

    题目描述:
    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
    【解题思路】本题应该是传统的题型的变形,我们可以先读入一行,然后从最后的字符开始处理,对于字符串我们使之逆序输出,对于空格原样输出。

        本题注意两点:空格需要原样输出,不管有多少个;另外,利用gets函数读入一行效率要比getline更高。

    AC code:

    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <iostream>
    using namespace std;
     
    int main()
    {
      char str[50005];
      while(gets(str))
      {
        int len=strlen(str),idx=len-1;
        while(idx>=0)
        {
          while(idx>=0 && str[idx]==' ') putchar(str[idx--]);
          int end=idx;
          while(idx>=0 && str[idx]!=' ')--idx;
          if(end==-1) break;
          for(int i=idx+1;i<=end;++i)
            putchar(str[i]);
        }
        printf("
    ");
      }
      return 0;
    }
    /**************************************************************
        Problem: 1361
        User: huo_yao
        Language: C++
        Result: Accepted
        Time:50 ms
        Memory:1520 kb
    ****************************************************************/
    题目链接:http://ac.jobdu.com/problem.php?pid=1361

    九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299



  • 相关阅读:
    Java 过滤器的作用
    TreeView的绑定
    设计模式(一)工厂模式Factory(创建型)
    【剑指offer】员工年龄排序
    Spring3.0 AOP 具体解释
    IT行业新名词--透明手机/OCR(光学字符识别)/夹背电池
    MYSQL C API 记录
    Hibernate的介绍
    数据绑定(八)使用Binding的RelativeSource
    一、ExtJS下载使用
  • 原文地址:https://www.cnblogs.com/huoyao/p/4248879.html
Copyright © 2011-2022 走看看