char* reverseWords(char* s) {
int length = strlen(s);
for (int mid = length / 2; mid < length; mid++) {
char tmp = s[mid];
s[mid] = s[length - mid - 1];
s[length - mid - 1] = tmp;
}
//换完位置了,该去位置了,即去除所有多余的空格。
int i = 0;//i指向第一个元素
int j = 0;
while (s[j] == ' ') {
j++;
}
if (s[j] == '\0') {
return NULL;
}
while (true) {
while (j < length && s[j] != ' ') {
s[i] = s[j];
i++;
j++;
}
while (s[j] == ' ') {
j++;
}
if (s[j] == '\0') {
s[i] = '\0';
break;
}
else {
s[i] = ' ';
i++;
}
}
//每个词逐个翻转。
i = 0;
j = 0;
//在这length得变一变
length = strlen(s);
while (j <= length) {
while ((j < length) && (s[j] != ' ')) {
j++;
}
int mid = (i + j) / 2;
while (mid < j) {
char tmp1 = s[i + j - 1 - mid];
s[i + j - 1 - mid] = s[mid];
s[mid] = tmp1;
mid++;
}
j++;
i = j;
}
return s;
}
大概思路:三段式般的思路。1、翻转整个s串。2、双指针干掉多余的空格。3、遍历每个子字符串,串内翻转。
犯了一个弥天错误,逐行调试才发现的: