题目

原题链接

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

**输入格式:**测试输入包含一个测试用例,在一行内给出总长度不超过80的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用1个空格分开,输入保证句子末尾没有多余的空格。

**输出格式:**每个测试用例的输出占一行,输出倒序后的句子。

输入样例:
Hello World Here I Come

输出样例:
Come I Here World Hello

解析

反转单词顺序但是不反转单词内容
C++倒序入栈的方式,重新构造字符串
Java和Python则直接将其分割成链表,reverse()一下后输出即可

代码

C++解法

#include <cstring>
#include <iostream>
const int maxn = 105;
char s[maxn];
char stackString[maxn];
int stackPos;
char outputString[maxn];
int outputPos;

void output() {
    while (stackPos != 0)
        outputString[outputPos++] = stackString[--stackPos];
    outputString[outputPos++] = ' ';
}
int main() {
    scanf("%[^\n]", s);
    int len = strlen(s);

    stackPos = 0;
    outputPos = 0;

    for (int i = len - 1; i >= 0; --i) {
        if (s[i] == ' ') {
            output();
        } else {
            stackString[stackPos++] = s[i];
        }
    }
    output();
    outputString[--outputPos]= '\0';

    printf("%s\n", outputString);
    return 0;
}

Python解法

stringList = input().split(" ")
stringList.reverse()
print(" ".join(stringList))

Java解法

import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();

        List<String> list = Arrays.asList(s.split(" "));
        Collections.reverse(list);

        boolean isFirst = true;
        for (String c : list) {
            if (isFirst) {
                isFirst = false;
            } else {
                System.out.print(" ");
            }
            System.out.print(c);
        }
        System.out.print("\n");
        in.close();
    }
}