#include <stdio.h>
#include <string.h>
#include <assert.h>
void reverse(char* left, char* right)
{
assert(left && right);
while (left <= right)
{
int ret = *left;
*left = *right;
*right = ret;
left++;
right--;
}
}
int main()
{
char ch[10001] = { 0 };
int i = 0;
while ((ch[i] = getchar()) != '\n')
{
if ((ch[i] < 'A' || ch[i] > 'Z') && (ch[i] < 'a' || ch[i] > 'z'))
{
ch[i] = ' ';
}
i++;
}
//删除换行符
ch[i] = 0;
int sz = strlen(ch) - 1;
//先逆置整个字符串
reverse(ch, ch + sz);
//再逆置单词
char* pc = ch;
while (*pc)
{
char* start = pc;
char* end = pc;
while (*end != ' ' && *end != '\0')
{
end++;
}
reverse(start, end - 1);
if (end != '\0')
pc = end + 1;
else
pc = end;
}
//将多个空格转换为一个空格进行输出
char* end = ch;
char* start = ch;
while (*end)
{
if (*end != ' ')
printf("%c", *end++);
else
{
start = end;
while (*start == ' ')
{
start++;
}
end = start;
printf(" ");
}
}
return 0;
}