c++ - 颠倒句子的单词?

标签 c++ c string

我不明白我做错了什么。看起来这应该有效:

调用reverse_reverse("这房子是蓝色的"); 应该先打印出“this house is blue”,然后是“blue is house this”..

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 block 中包含该行:

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

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

我认为这也行不通,但会让您更接近您想要的。

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

相关文章:

c++ - 使用已删除的指针地址

c++ - 读取二进制文件时释放内存

c - 调用两次时从串口读取失败

比较和替换 C 中的重音/特殊字符

string - IF 函数识别单元格的第一个字符

java - 采用字符串的不可见 ActiveX

c++ - 仅使用 volatile 修复 DCLP

c - 类型 `rune_t`在C中代表什么?

c - 从用户获取字符串,然后将其从屏幕上删除

java - 如何将某个位置的字符替换为某个字母