具体思路就是两次翻转,然后滑动窗口取单词在进行翻转。

 *
 * @param s string字符串
 * @param n int整型
 * @return string字符串
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
void revers(char* s, int left, int right) {
    while (left < right) {
        s[left]  = s[left] + s[right];
        s[right] = s[left] - s[right];
        s[left]  = s[left] - s[right];
        left++;
        right--;
    }
}
void change_Aa(char* s) {
    int n = strlen(s);
    for (int i = 0; i < n; i++) {
        if (s[i] <= 'z' && s[i] >= 'a') {
            s[i] -= 32;
            continue;
        }
        if (s[i] <= 'Z' && s[i] >= 'A') {
            s[i] += 32;
            continue;
        }
    }
}
char* trans(char* s, int n ) {
    // write code here
    revers(s, 0, n - 1); //整个字符串翻转
    int i = 0, j = 0, k = 0;
    while (j < n) {
        if (s[j] == ' ' || j == n - 1) { //每个单词进行翻转
            k = j == n - 1 ? n - 1 : j - 1;
            revers(s, i, k);
            i = j + 1;
        }
        j++;
    }
    change_Aa(s);
    return s;
}