华为笔试题:句子逆序

题目描述

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


接口说明

/**
 * 反转句子
 * 
 * @param sentence 原句子
 * @return 反转后的句子
 */
public String reverse(String sentence);

输入描述:

将一个英文语句以单词为单位逆序排放。

输出描述:

得到逆序的句子

示例1

输入

I am a boy

输出

boy a am I
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

void myreverse(string &s, int pos1, int pos2) {
    for (int i = 0; i <= (pos2 - pos1) / 2; ++i) {
        char ch = s[pos1 + i];
        s[pos1 + i] = s[pos2 - i];
        s[pos2 - i] = ch;
    }
}

string reverse(string sentense) {
    int index = sentense.find(' ');
    if (index == -1) {
        myreverse(sentense, 0, sentense.size() - 1);
        return sentense;
    }
    int pos = 0;
    while (index != -1) {
        myreverse(sentense, pos, index - 1);
        pos = index + 1;
        index = sentense.find(' ', pos);
    }
    myreverse(sentense, pos, sentense.size() - 1);
    myreverse(sentense,0, sentense.size() - 1);
    return sentense;
}

int main() {
    string s;
    getline(cin, s);
    s = reverse(s);
    cout << s << endl;
    return 0;
}
 
发布了34 篇原创文章 · 获赞 10 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41111088/article/details/104790802
今日推荐