所有单词都要翻转,那咱就一个个来翻嘛,每次找到一个单词的左右边界,然后用左右互换来翻转单词即可。
char* reverseWord(char* str ) {
   int left = 0, right = 0, n = strlen(str);  //假设第一个单词的左右边界下标都是0,即起始处
    while(right < n){    //右边界最大也就是n-1
        left = right;    //每次找单词时都假设左边界和右边界一样,然后再去找右边界,即找空格
        while(right < n && str[right] != ' ')   //只要不是空格就继续往后走
            right++;          //在遇到空格时停下,right为空格的下标
        int i = left, j = right - 1;   //待翻转单词的左右边界
        while(i < j){         //用左右依次交换来翻转单词
            int tmp = str[i];
            str[i] = str[j];
            str[j] = tmp;
            i++; j--;   //左下标往右走,右下标往左走
        }
        while(str[right] == ' ')
             right++;   //翻转完一个单词,开始找下一个单词,right继续后移,找到第一个不是空格的即为下一个单词的起始处
    }
    return str;
}
或者分开写,反转函数单独放一边更清楚
char* reverse(char* str, int left, int right){   //反转函数
      int i = left, j = right;
      while(i < j){
            int tmp = str[i];
            str[i] = str[j];
            str[j] = tmp;
            i++; 
            j--;
        }
    return str;
}

char* reverseWord(char* str ) {
    int n = strlen(str);
    int i = 0, j = 0;
    while(j < n){
        while(str[i] == ' ')  //
            i++;
        //遇到非空的第一个即为单词左边界,i停在左边界处
        j = i;  //j从左边界开始遍历,寻找右边界
        while(j < n && str[j] != ' ')
            j++;  //j遇到第一个空格表示一个单词已结束,右边界为j-1
        reverse(str, i, j-1);
        i = j;  //i从j开始继续寻找下一个单词的左边界
    }
    return str;   
}