题目描述:
例如,输入“student. a am I”。输出是“I am a student.”。
思路:第一步翻转整个句子的所有字符,比如翻转“I am a student.”,得到".tneduts a ma I" 第二步,再反转各个单词
//实现字符串翻转的函数
void Reverse(char* pBegin,char* pEnd)
{
if(pBegin==nullptr||pEnd==nullptr)
return;
while(pBegin<pEnd)
{
char temp=*pBegin;
*pBegin=*pEnd;
*pEnd=temp;
pBegin++;pEnd--;
}
char*ReverseSentence(char* pData)
{
if(pData==nullptr)
return nullptr;
char* pBegin=pData;
char* pEnd=pData;
while(*pEnd!='\0)
++pEnd;
pEnd--;
//翻转整个句子
Reverse(pBegin,pEnd);
//翻转句子里的每个单词
pBegin=pData;
while(pBegin!='\0)
{
if(*pEnd==' '||*pEnd!='\0')
{
--pEnd;
Reverse(pBegin,pEnd);
pBegin=++pEnd;
}
if(*pBegin==' ')
{
pBegin++;
pEnd++;
}
else
pEnd++;
}
return pData;
}
法二:用strinmg类,reverse()算法、string::size_type pos = 0
class Solution {
public:
string ReverseSentence(string str) {
reverse(str.begin(), str.end());
string::size_type pos = 0, e;
while((e=str.find(' ', s)) != string::npos){
reverse(str.begin()+s, str.begin()+e);
s = e + 1;
}
reverse(str.begin()+s, str.end());
return str;
}
};