/*
* 句子逆序
* 描述: 将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
* 所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
* 接口说明
* 反转句子
* @param sentence 原句子
* @return 反转后的句子
* public String reverse(String sentence);
* 知识点: 数组
* 题目来源: 内部整理
* 练习阶段: 初级
* 运行时间限制: 10Sec
* 内存限制: 128MByte
* 输入:
* 将一个英文语句以单词为单位逆序排放。
* 输出:
* 得到逆序的句子
* 样例输入: I am a boy
* 样例输出: boy a am I
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class CReverseSentence
{
public:
std::string m_Sentence;
std::string m_ReverseSentence;
public:
CReverseSentence()
{}
public:
void Input(std::string &str);
bool Isvalid(std::string str);
std::string reverse(std::string sentence);
void Output(std::string str);
};
void CReverseSentence::Input(std::string &str)
{
getline(std::cin,str,'\n');
return;
}
bool CReverseSentence::Isvalid(std::string str)
{
int size = str.size();
char c;
/* 输入字符串为空 */
if(size==0)
{
return false;
}
for(int i=0;i<size;i++)
{
c = str.at(i);
if(!((c>=65 && c<=90) || (c>=97 && c<=122) || (c==32)))
{
return false;
}
}
return true;
}
std::string CReverseSentence::reverse(std::string sentence)
{
vector<std::string> Substr;
vector<std::string>::reverse_iterator iter;
int strlen = sentence.size();
char Delm = 32;/* 空格 */
int Pre = -1; /* 前一个空格的序号 */
char c;
for(int i=0;i<strlen;i++)
{
c = sentence.at(i);
if(c==Delm)
{
/* 连续多个空格 */
if(i==(Pre+1))
{
Pre = i;
continue;
}
std::string str_temp = sentence.substr(Pre+1,i-Pre-1);
Substr.push_back(str_temp);
Pre = i;
}
}
c = sentence.at(strlen-1);
if(c!=Delm)
{
std::string str_temp = sentence.substr(Pre+1,strlen-Pre);
Substr.push_back(str_temp);
}
int size = Substr.size();
/* 输入的字符串中没有英文字母 */
if(size==0)
{
m_ReverseSentence = "";
return m_ReverseSentence;
}
for(iter=Substr.rbegin();iter!=Substr.rend()-1;iter++)
{
std::string tempstr = *iter;
m_ReverseSentence += tempstr;
m_ReverseSentence += " ";
}
if(iter!=Substr.rend())
{
std::string tempstr = *iter;
m_ReverseSentence += tempstr;
}
return m_ReverseSentence;
}
void CReverseSentence::Output(std::string str)
{
std::cout<< str << endl;
return;
}
int main()
{
CReverseSentence p;
p.Input(p.m_Sentence);
bool flag = p.Isvalid(p.m_Sentence);
if(!flag)
{
return -1;
}
p.reverse(p.m_Sentence);
p.Output(p.m_ReverseSentence);
system("pause");
return 0;
}