#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int iswhite(int c)
{
return !c || isspace(c) || ispunct(c);
}
void swap(char* a, char * b)
{
char t = *a;
*a = *b;
*b = t;
}
void reverseWord(char * b, char * e)
{
while(b < e)
{
swap(b++,e--);
}
}
char * reverse(char * s)
{
reverseWord(s,s+strlen(s)-1);
for(char* c = s; *c; ++c)
{
if (iswhite(*c)) continue;
char * b = c;
while(!iswhite(*c)) ++c;
reverseWord(b,c-1);
}
return s;
}
char s[] = "Привет, это длинное предложение!";
int main(int argc, const char * argv[])
{
puts(reverse(s));
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KCmludCBpc3doaXRlKGludCBjKQp7CiAgICByZXR1cm4gIWMgfHwgaXNzcGFjZShjKSB8fCBpc3B1bmN0KGMpOwp9Cgp2b2lkIHN3YXAoY2hhciogYSwgY2hhciAqIGIpCnsKICAgIGNoYXIgdCA9ICphOwogICAgKmEgPSAqYjsKICAgICpiID0gdDsKfQoKdm9pZCByZXZlcnNlV29yZChjaGFyICogYiwgY2hhciAqIGUpCnsKICAgIHdoaWxlKGIgPCBlKQogICAgewogICAgICAgIHN3YXAoYisrLGUtLSk7CiAgICB9Cn0KCmNoYXIgKiByZXZlcnNlKGNoYXIgKiBzKQp7CiAgICByZXZlcnNlV29yZChzLHMrc3RybGVuKHMpLTEpOwogICAgZm9yKGNoYXIqIGMgPSBzOyAqYzsgKytjKQogICAgewogICAgICAgIGlmIChpc3doaXRlKCpjKSkgY29udGludWU7CiAgICAgICAgY2hhciAqIGIgPSBjOwogICAgICAgIHdoaWxlKCFpc3doaXRlKCpjKSkgKytjOwogICAgICAgIHJldmVyc2VXb3JkKGIsYy0xKTsKICAgIH0KICAgIHJldHVybiBzOwp9CgpjaGFyIHNbXSA9ICLQn9GA0LjQstC10YIsINGN0YLQviDQtNC70LjQvdC90L7QtSDQv9GA0LXQtNC70L7QttC10L3QuNC1ISI7CgppbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKewogICAgcHV0cyhyZXZlcnNlKHMpKTsKfQo=