мой код чуть-чуть больше, зато проверенный и с комментариями :Ъ
#include <stdio.h>
#include <string.h>
using namespace std;
int Count = 0; //количество слов
int Begin[1111]; //wordsBegin[i] - индекс начала слова i в s
int End[1111]; //wordsEnd[i] - индекс конца слова i в s
char s[11111]; //предложение
int sc = 0; //количество символов
bool isSeparator(char c)//проверяет: служет ли символ разделителем слов.
{
if (c == ' ' || c == ',' || c == '.') return true;
return false;
}
void addWord(int &last, int cur) //добавляет слово с номерами символов от last до cur
{
Begin[Count] = last;
End[Count] = cur;
last = cur + 2;
Count++;
}
int main()
{
char c = getchar();
while (c != 10) {
s[sc++] = c;
c = getchar();
}
int last = 0; //начало первого слова
for (int i = 0; i < sc; i++)//разбираем наше предложение по словам
{
if (isSeparator(s[last])) last = i; //пропускаем разделители
if (i > 0 && isSeparator(s[i]) && !isSeparator(s[i-1]))
addWord(last, i-1);
}
addWord(last, sc-1); // возможно у нас осталось ещё слово, стоящее в конце предложения
for (int i = Count-1; i >= 0; i--) //вывод слов в обратном порядке
{
for (int j = Begin[i]; j <= End[i]; j++)
printf("%c", s[j]);
printf(" "); //разделяем слова пробелом
}
return 0;
}