代码实现:
// 反转单词 左闭右闭 void reverse(char *str, int l, int r) {while (l < r) {char temp = str[l];str[l] = str[r];str[r] = temp;l++;r--;} }char* reverseWords(char *s) {int n = strlen(s);char *ret = malloc(sizeof(char) * (n + 1));int retSize = 0;int i, j;for (i = 0; i < n; i++) { // 去掉前导空格if (s[i] != ' ') {break;}}for (j = n - 1; j >= i; j--) {if (s[j] == ' ' && retSize == 0) { // 去掉后导空格continue;}if (s[j] == ' ' && s[j + 1] == ' ') { // 去掉多个空格,只保留一个continue;}ret[retSize++] = s[j];}ret[retSize] = '\0'; // 反转ret中的每一个单词for (i = 0; i < retSize; i++) {for (j = i + 1; j < retSize; j++) {if (ret[j] == ' ') {break;}}// 反转reverse(ret, i, j - 1);i = j;}return ret; }