描述
将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
数据范围:输入的字符串长度满足 1≤n≤1000
注意本题有多组输入
输入描述:
输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。
输出描述:
得到逆序的句子
示例1
输入:I am a boy
输出:boy a am I
示例2
输入:nowcoder
输出:nowcoder
思路
1.这道题的重点是将一句话中的每个单词提取出来。可以利用stringstream来完成这个工作。
代码
SentenceReverser.h
#pragma once
#include <mutex>
class SentenceReverser
{
public:
static SentenceReverser* getInstance();
public:
void reverse();
private:
SentenceReverser() = default;
~SentenceReverser() = default;
private:
static SentenceReverser* instance;
static std::mutex iMutex;
};
SentenceReverser.cpp
#include "SentenceReverser.h"
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
SentenceReverser* SentenceReverser::instance = nullptr;
std::mutex SentenceReverser::iMutex;
SentenceReverser* SentenceReverser::getInstance()
{
std::unique_lock<std::mutex> lock(iMutex);
if (nullptr == instance) {
instance = new SentenceReverser();
}
return instance;
}
void SentenceReverser::reverse()
{
/* input */
std::string inputString;
std::getline(std::cin, inputString);
/* verify */
if (1000 < inputString.size()) {
std::cout << "Invalid input" << std::endl;
return;
}
/* extract word from sentence */
std::vector<std::string> words;
std::stringstream sstream(inputString);
std::string word;
while(sstream >> word) {
words.push_back(word);
}
/* reverse */
std::string outputString;
for (auto idx = words.rbegin(); idx != words.rend(); idx++) {
outputString += *idx;
outputString += ' ';
}
std::cout << outputString << std::endl;
}
main.cpp
#include "SentenceReverser.h"
int main(int argc, char** argv)
{
auto reverser = SentenceReverser::getInstance();
reverser->reverse();
return 0;
}