华为机试——句子逆序

题目描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

输入描述:
将一个英文语句以单词为单位逆序排放。
输出描述:
得到逆序的句子
示例1

输入

I am a boy
输出

boy a am I

思路:从后往前遍历,遇到空格就将这个词加到output末尾再加上空格,最后一个词直接加,具体思路见注释~

程序:

#include 
#include 
using namespace std;

int main(){
    string input;
    getline(cin,input);
    string output;
    int len = input.length();
    int loc = len-1;//当前词的末尾索引
    for (int i = len - 1; i >= 0; --i){
        if (input[i] == ' '){//从后往前如果遇到空格
            output.append(input, i + 1, loc - i);//将这个词加到output中
            output += " ";//再加上空格,更新loc为i-1
            loc = i-1;
        }
    }
    output.append(input, 0, loc+1);//因为第一个词是不可能遇到空格的,所以循环结果直接加上第一个词
    cout << output << endl;

    return 0;
}

输出结果: 运行时间: 3 ms 占用内存:372K 状态:答案正确

你可能感兴趣的:(C/C++,华为机试在线训练,Array,String)