题目:
输入一个英文句子,反转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字符一样处理。
思路:
我们可以先整体翻转字符串的内容,然后每一个单词内再翻转一次。这种思路的关键在于实现一个函数以反转字符串中的一段
代码实现:
char* reverseWords(char* s) {
int len = strlen(s);
char* res = (char*)malloc(sizeof(char) * (len + 1));
int cur = 0, index = 0;
int left = len - 1, right = len - 1;
while (left >= 0) {
if (s[left] == ' ') {
left--;
} else {
right = left;
while (left >= 0 && s[left] != ' ') {
left--;
}
cur = left + 1;
while (cur <= right) {
res[index++] = s[cur++];
}
res[index++] = ' ';
}
}
if (index > 0 && res[index - 1] == ' ') {
res[index - 1] = '\0';
} else {
res[index] = '\0';
}
return res;
}