#include <iostream>
#include <ctype.h>
#include <string.h>

char           *
OdwrocNapis(char *Bufor, int dlugosc = 0)
{
  if (dlugosc <= 0)
    dlugosc = strlen(Bufor);
  char           *p = Bufor;
  char           *k = Bufor + dlugosc - 1;
  while (p < k)
  {
    char            c = *p;
    *(p++) = *k;
    *(k--) = c;
  }
  return (Bufor);
}

char           *
OdwrocSlowa(char *Bufor)
{
  char           *p = Bufor;
  char           *k = Bufor + strlen(Bufor);
  while (p < k)
  {
    char           *ps = p;
    while ((*ps) && (*ps == ' '))
      ++ps;
    char           *ks = ps;
    while ((*ks) && (*ks != ' '))
      ++ks;
    if (ps < ks)
      OdwrocNapis(ps, ks - ps);
    p = ks;
  }
  OdwrocNapis(Bufor);
  return (Bufor);
}

//const char    LiteryPolskie[] = "¹æê³ñóœ¿Ÿ\0¥ÆÊ£ÑÓŒ¯";
//Windows(aby zrozumiec co tu jest zapisane)
  // const char   LiteryPolskie[] = "¥†©ˆä¢˜¾«\0¤¨ãà—½";
//Windows console
  const char      LiteryPolskie[] = "±æê³ñó¶¿¼\0¡ÆÊ£ÑÓ¦¯¬";
//Linux

  char            DuzaLitera(char Zn)
{
  const char     *Ptr = strchr(LiteryPolskie, Zn);
  if (Ptr)
    Zn = *(Ptr + 10);
  else
    Zn = (char)toupper(Zn);
  return (Zn);
}

bool 
CzyPalindrom(const char *Bufor)
{
  const char     *p = Bufor;
  const char     *k = Bufor + strlen(Bufor) - 1;
  while (p < k)
  {
    while ((p < k) && (*p == ' '))
      ++p;
    while ((p < k) && (*k == ' '))
      --k;
    if ((p < k) && (DuzaLitera(*p) != DuzaLitera(*k)))
      return (false);
    ++p;
    --k;
  }
  return (true);
}

int 
main()
{
  while (true)
  {
    char            Bufor[1024];
    cout << "Podaj napis: ";
    cin.getline(Bufor, 1024, '\n');
    if (!*Bufor)
      break;
    cout << Bufor << endl;
    int             dl = strlen(Bufor);
    cout << "Odwrocony wydruk: ";
    for (int i = dl - 1; i >= 0; --i)
      cout << Bufor[i];
    cout << endl;
    cout << "Napis " << (CzyPalindrom(Bufor) ? "" : "nie ") << "jest palindromem" << endl;
    char            Bufor2[1024];
    strcpy(Bufor2, Bufor);
    cout << "Odwrocony napis: ";
    cout << OdwrocNapis(Bufor2) << endl;
    char            Bufor3[1024];
    strcpy(Bufor3, Bufor);
    cout << "Odwrocone slowa: ";
    cout << OdwrocSlowa(Bufor3) << endl;
  }
  return (0);
}

