#include <stdio.h>

int strlen(const char* s)
{
	int l = 0;
	while (*s++) ++l;
	return l;
}


void reverse(char* str)
{
	int i = 0, j = strlen(str) - 1;
	
	for(; i < j; ++i, --j)
    {
	   str[i] ^= str[j];
	   str[j] ^= str[i];
	   str[i] ^= str[j];
    }
}

void nulltok(char* str, char tok, int* parts)
{
	int i = 0, len = strlen(str);
	*parts = 1;
	
	for (; i < len; ++i)
	{
		if (str[i] == tok)
		{
			str[i] = '\0';
			++(*parts);
		}
	}
}

char* reverse_sentence(char* str)
{
	char* tmp = str;
	reverse(str);
	
	int i = 0, parts = 0, len = strlen(str);
	nulltok(str, 0x20, &parts);
	
	while(parts--)
	{
		reverse(str);
		str += strlen(str) + 1;
	}
	
	for(; i < len; ++i)
	    if (tmp[i] == '\0')
	        tmp[i] = 0x20;
	
	return tmp;
}


int main(void)
{
	char str[] = "dogs like cats";
	printf("%s", reverse_sentence(str));
	
	return 0;
}
