我不明白我做错了什么。看起来这应该管用:
调用reverse_reverse(“这房子是蓝色的”);
应该先打印“这房子是蓝色的”,然后“蓝色是这房子”。。

void reverse_reverse(char * str) {
    char temp;

    size_t len = strlen(str) - 1;
    size_t i;
    size_t k = len;

    for(i = 0; i < len; i++) {
        temp = str[k];
        str[k] = str[i];
        str[i] = temp;
        k--;

        if(k == (len / 2)) {
            break;
        }
    }

    cout << str << endl;

    i = 0;
    for(k = 0; k < len; k++) {
        if(str[k] == ' ') {
            size_t a = k;
            for(size_t b = i; b < k; b++) {
                temp = str[b];
                str[b] = str[a];
                str[a] = temp;
                a--;

                if(a == (((k - i) / 2) + i)) {
                    break;
                }
            }
        }
        i = k + 1;
    }

    cout << str << endl;
}

最佳答案

你有
i = k+1
然后是for循环
for(size_t b = i; b < k; b++)
在循环开始之前,它永远不会以i > k的形式进入,因此也不会以b > k的形式进入。
也许你想在if块中有一行:

if (str[k] == ' ') {
...

    i = k+1; // <----- Here
}
// i = k+1; // Instead of here.

我认为这也不管用,但会让你更接近你的愿望。

关于c++ - 颠倒句子的单词?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4929789/

10-12 01:54