问题:
给定一个字符串,逐个翻转字符串中的每个单词。
示例:
输入:“the sky is blue”,
输出:“blue is sky the”.
说明:
- 无空格字符构成一个单词。
- 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
- 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define IN 1
#define OUT 0
void reverse(char *start, char *end) {
while (start <= end) {
int t = *start;
*start = *end;
*end = t;
start += 1;
end -= 1;
}
}
void reverse_word(char *s) {
int flag = OUT;
char *word_start = NULL;
char *end = s + strlen(s) - 1;
while (s <= end) {
if (!isalnum(*s) && flag == IN) {
reverse(word_start, s - 1);
flag = OUT;
} else if (isalnum(*s) && flag == OUT) {
flag = IN;