HJ13 句子逆序

131 阅读1分钟

描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”

所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

数据范围:输入的字符串长度满足 

image.png

注意本题有多组输入

输入描述:

输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。

输出描述:

得到逆序的句子

思路:

将所有字符串存储在数组内部,之后反向输出即可\color{darkseagreen}{将所有字符串存储在数组内部,之后反向输出即可}

示例

输入:I am a boy

输出:boy a am I
输入:nowcoder

输出:nowcoder

实现1

#include<iostream>
#include<string>
#include<algorithm>
#include <vector>
using namespace std;
int main() {
    vector<string> cur;
    string s;
    while (cin >> s) {
        cur.push_back(s);
    }
    reverse(cur.begin(), cur.end());
    for (int i = 0; i < cur.size(); ++i) {
        if (i) cout << " ";
        //当i等于0时,这个不会执行
        cout << cur[i];
    }
    cout << endl;
    return 0;
}

实现2

  1. 倒序找空格
  2. 正序输出单词
  3. 最终输出时用空格分开单词
#include<stdio.h>
#include<string.h>

int main()
{
    char val[1000]={0};
    //输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。
    gets(val);
    int len = strlen(val);
    int end = len;
    for(int i=len-1; i>=-1; i--){
        //通过倒着找空格判断单词
        if((val[i] == ' ') || (i==-1)){
            //正序输出找到的单词
            for(int j=i+1; j<end; j++){
                printf("%c",val[j]);
            }
            end = i;//将结束位置向前移动
            printf(" ");//通过空格分隔
        }
    }
    
    return 0;
}