题目描述:
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。
分析:
完整代码:
class Solution {
public:
string ReverseSentence(string str) {
//检查输入的合法性
if (str.length() <= 0)
return str;
//声明两个变量表示头部游标和尾部游标
int pBegin = 0;
int pEnd = 0;
//将 pEnd 移至结束符处
while (str[pEnd] != '\0')
{
pEnd++;
}
//将 pEnd 移至字符串最后一个字符
pEnd--;
//翻转整个字符串
Reverse(str, pBegin, pEnd);
//将 pBegin 和 pEnd 移至开头处
pBegin = pEnd = 0;
//如果 pBegin 没有遍历到结束符处
while (str[pBegin] != '\0')
{
//如果 pBegin 指向的是空格
if (str[pBegin] == ' ')
{
pBegin++;
pEnd++;
}
else if (str[pEnd] == ' ' || str[pEnd] == '\0')
{
//单词内翻转字符
Reverse(str, pBegin, --pEnd);
//将 pBegin 和 pEnd 移至同一处
pBegin = ++pEnd;
}
else
{
pEnd++;
}
}
return str;
}
private:
//翻转字符串
void Reverse(string &sent, int begin, int end)
{
//检查输入的合法性
if (begin<0 || end<0)
return;
//
while (begin < end)
{
//呼唤字符
char c = sent[begin];
sent[begin] = sent[end];
sent[end] = c;
begin++;
end--;
}
}
};