• 牛客网在线编程题——句子反转(3)


    题目描述

    给定一个句子(只包含字母和空格), 将句子中的单词位置反转,单词用空格分割, 单词之间只有一个空格,前后没有空格。 比如: (1) “hello xiao mi”-> “mi xiao hello”

    输入描述:

    输入数据有多组,每组占一行,包含一个句子(句子长度小于1000个字符)

    输出描述:

    对于每个测试示例,要求输出句子中单词反转后形成的句子
    示例1

    输入

    hello xiao mi
    

    输出

    mi xiao hello

    解题代码:
    #include <iostream>
    #include <string>
    using namespace std;
    string transfer(string s)
    {
        int len=s.length();
        for(int i=0;i<len/2;i++)
        {
            char temp=s[i];
            s[i]=s[len-i-1];
            s[len-i-1]=temp;
        }
        return s;
    }
    int main(){
        string str;
        getline(cin,str);
        string temp;
        int len=str.length();
        int start=0,end=0;
        for(int i=0;i<len;i++)
        {
            if(str[i]==' '||i==len-1)
            {
                if(i==len-1)
                {
                    end=i;
                }
                else
                {
                    end=i-1;
                }
                string substr;
                for(int j=start;j<=end;j++)
                {
                    substr +=str[j];
                }
                temp+=transfer(substr);//反转句子内的单词
                if(i!=len-1)
                {
                    temp+=' ';
                    start=i+1;
                }else
                {
                    break;
                }
            }
        }
        cout<<transfer(temp)<<endl;//把整个句子当成一个单词进行反转
        return 0;
    }

    值得注意的点:1、接受带空格的字符串输入时,不能直接只用cin>>str;这样只能接受第一个空格之前的字符串,本文用的是getline(cin,str);

              2、解题思路,先反转句子内部的每一个单词,再把整个句子当作一个单词反转,这样在局部和整体各反转一次,就巧妙的实现了单词内正序,单词间倒序。

     
  • 相关阅读:
    五步搞定Android开发环境部署
    centos7安装MongoDB3.4
    java数据结构之三叉链表示的二叉树
    java数据结构之二叉树遍历的非递归实现
    java数据结构之二叉树的定义和递归实现
    java数据结构之树
    java数据结构之递归算法
    java数据结构之(堆)栈
    redis主从复制配置
    Redis 发布订阅
  • 原文地址:https://www.cnblogs.com/lipanDL/p/10022378.html
Copyright © 2020-2023  润新知