/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param str string字符串 
 * @return string字符串
 */
 //思路一:
 //单独一个反转函数(局部函数)
 //先字符串整体反转
 //然后再确定每个单词范围,再局部反转
 //首先是左指针i找到空格停下,自增1,右指针j接替寻找右边空格,将(i)-(j-1)的字符反转,更新i的值,继续找

 //思路二:
 //定义两个栈,一个栈1负责中间过渡,栈2负责输出值
 //对字符串从后往前判断是否为空格,不为则将将字符压入栈1,为空格则将栈1中的字符弹出到找2中,并将空格压入栈2
 //此外最后栈1中还有最后一个字符,还要压入栈2


//思路一:
 //单独一个反转函数(局部函数)
 void reverword(char *s, int font, int rear)
 {
    char temp;
    while(font<rear)
    {
        temp = s[font];
        s[font] = s[rear];
        s[rear] = temp;
        font++;
        rear--;
    }
 }
 
char* ReverseSentence(char* str ) 
{
    // write code here
    //先字符串整体反转
    int i = 0, j = 0, n = strlen(str);
    reverword(str, 0, n-1);
    printf("%s\n", str);
    //然后利用空格再确定每个单词范围,再局部反转
    //首先是左指针i找到空格停下,自增1,右指针j接替寻找右边空格,将(i)-(j-1)的字符反转,更新i的值,继续找
    while (i<n)
    {
        while(str[i] == ' ')
        {
            i++;
        }
        j = i;  //首先是左指针i找到空格停下,右指针j寻找右边空格
        while(j<n && str[j] != ' ')
        {
            j++;
        }
        reverword(str, i, j-1);
        printf("%s\n", str);
        i = j;  //更新i的值,继续找
    }
    return str;
}