1. Tworzysz dynamicznie tablice (new i delete w przypadku c to malloc i free), ilość tablic które tworzysz to ilość słów a wielkość poszczególnych tablic to długość słowa, bez string.h i funkcji size() możesz to zrobić tak: szukasz znaku spacji i jak tab[i] == ' ' to wielkość tablicy to różnica "i" pomiędzy kolejnymi spacjami.
2. Posiadając już tablice z poszczególnymi słowami możesz zaminić kolejność wyświetlania słów;
std::cout<<tab3<<tab2<<tab1;
To rozwiązanie jest najprostsze i nie do końca dobre, ale jako tako działa. Co oznacz "jako tako"?
tab1='Ala';
tab2='ma';
tab3='kota';
cout<<tab3<<" "<<tab2<<" "<<tab1;
Jednak wynik programu będzie wynosić "kota ma Ala", a nie "Kot ma Ale".
1.Możesz usuwać ostatnią literę w słowie, czyli 'a':
kota - kot
żubra - żubr
2.Pierwsza litera w słowie nie jest wielka ale jeśli stworzysz jedną prostą funkcję z użyciem rzutowania typu na (char) to nie będzie problemu - jeżeli nie wiesz o co chodzi zapoznaj się z ASCII. Dodajesz więc tylko określoną wartość aby "przerobić" literę małą na wielką. Bez ctype.h będzie to trudniejsze, ale pamiętaj, że małe litery występują w określonym przedziale, więc jeden if rozwiąże problemy.
3. Aby odmienić odpowiednio imię możesz użyć zmiany litery 'a' na 'ę', ale będzie to działać tylko przy imionach kobiet, Ania, Ela, Monika - Anię, Elę, Monikę. Przy imionach męskich musisz zastosować inną regułę dodając literę 'a' na koniec słowa.
Robert - Roberta, Mateusz - Mateusza, ALE UWAGA bo np. Wojtek - Wojtka, przy zastosowaniu reguły dla imion męskich to będzie Wojteka :)
Po zastosowaniu się to tych wszystkich zasad powinieneś napisać ten program w 25 minut MAX :)
Myślę, że pomogłem, jak nie będziesz czegoś wiedział, to napisz, z przyjemnością pomogę.
Normalnie takie programy modulujące tekst stosują wielkie bazy słów i reguł gramatycznych