PAT B1009 说反话(C++)

PAT甲级目录 | PAT乙级目录

题目描述

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

输入格式:

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

输出格式:

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

输入样例:

1
Hello World Here I Come

输出样例:

1
Come I Here World Hello

易错点:

  • 注意输出格式,末尾没有空格

也许陌生的知识点

  • vector<int> ans;
    • 实现变长数组,元素类型可任意指定
      • ans.push_back(num[i])往变长数组末尾中添加一个元素
      • ans.pop_back()删除变长数组中最后一个元素
    • 需要的头文件:vector
  • getline(cin, str);
    • 输入一整行的字符串,包括空格等

代码示例:

  • 方法一(C语言)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <cstdio>
    #include <cstring>
    int main(){
    char str[81][81];
    int cnt = 0;
    while( scanf("%s", str[cnt]) != EOF){
    cnt++;
    }
    for(int i = cnt - 1; i >= 0; i--){
    printf("%s", str[i]);
    if(i > 0) printf(" ");
    }
    printf("\n");
    return 0;
    }
  • 方法二(C++)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <string>
    #include <iostream>
    #include <vector>
    using namespace std;
    int main(){
    string str;
    vector<string> ans;
    getline(cin, str);
    for(int i = 0; i < str.length();i++){
    string temp;
    while(i < str.length() && str[i] != ' ') temp += str[i++];
    ans.push_back(temp);
    }
    for(int i = ans.size() - 1; i >= 0; i--){
    cout << ans[i];
    if(i != 0) cout << ' ';
    }
    return 0;
    }