#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));
}
