利用翻转函数,先对整串反转,再用pp和p两个指针判断单词的位置进行逐个反转。
细节处理要考虑串前面的空格,串中连续的多个空格,串的最后一个单词。
string reverse(string str, int left, int right)
{
if (left<0 || right > str.length() - 1) {
return "";
}
while (left < right) {
char tmp;
tmp = str[left];
str[left] = str[right];
str[right] = tmp;
left++;
right--;
}
return str;
}
string ReverseSentence(string str) {
int left = 0;
int right = str.length() - 1;
str = reverse(str, left, right);
int p = 0, pp = 0;
//去掉开头的空格
while (str[p] != '\0'&& str[p] == ' ') {
p++;
}
pp = p;
while (p < str.length()) {
p++;
if (str[p] == ' ' || str[p]== '\0') {
str = reverse(str, pp, p-1);
while (str[p] != '\0'&& str[p] == ' ') {
p++;
}
pp = p;
}
}
return str;
}