我不明白我做错了什么。看起来这应该有效:
调用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/