PTA: PAT (Basic Level) Practice 1009

说反话

题目描述:

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

输入格式:

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

输出格式:

每个测试用例的输出占一行, 输出倒序后的句子.

输入样例:

1
Hello World Here I Come

输出样例:

1
Come I Here World Hello

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/* PTA 1009 说反话
* 2022/07/24
* */

#include <iostream>

using namespace std;

int main() {
char a[81];
cin.getline(a, 81, '\n');
char p[80][80] = {'\0'};
int count = 0;
int i = 0;
int y = 0;
while (a[i] != '\0') {
for (; (a[i] != ' ') && (a[i] != '\0'); y++, i++)
p[count][y] = a[i];
p[count][y] = '\0';
count++;
if (a[i] != '\0')
i++;
y = 0;
}
for (int j = count - 1; j > 0; j--)
cout << p[j] << " ";
cout << p[0];
}

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// PTA 1006 换个格式输出整数
/// 2023/01/06

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str = input.nextLine();
String[] ans = str.split(" ");
for (int i = ans.length - 1; i >= 0; i--) {
System.out.print(ans[i]);
if (i != 0)
System.out.print(" ");
}
}
}

简要解析:

这道题用 Java 来做的话还是比较简单的, 用一个字符串存放输入的句子, 然后按空格拆分成字符串数组, 然后倒序输出就是结果了.
用 C++ 的化比较复杂了, 要自己手写一个 split 函数. (其实, 这个题的 C++ 程序应该更接近 C 语言风格)

写在最后:

又去 CSDN 上看了看柳诺的代码, 发现她使用了 “栈” 这种数据结果, 对这个题来说确实是降维打击啊!
附柳诺的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<string> v;
string s;
while(cin >> s)
v.push(s);
cout << v.top();
v.pop();

while(!v.empty()) {
cout << " " << v.top();
v.pop();
}
return 0;
}
2023-02-17 
IP属地: 曹县

PTA: PAT (Basic Level) Practice 1009
https://dengwuli.github.io/2023/02/17/PTA 题解/PAT (Basic Level) Practice 1009/
作者
DengWuLi
发布于
2023年2月17日
更新于
2023年7月14日
许可协议