/*
Napisaæ funkcje sprawdzaj¹c¹ czy podany ci¹g jest plaindromem.























*/
#include <iostream>
#include <ctype>

char PolToUpper(char Ch)
  {
   const char Up[]="¤¨ãà—½";
   const char Dn[]="¥†©ˆä¢˜¾«";

//   const char Up[]="¥ÆÊ£ÑÓŒ¯";
//   const char Dn[]="¹æê³ñóœ¿Ÿ";
   const char *x=strchr(Dn,Ch);
   if(x) Ch=*(x-Dn+Up);
   return x?*(x-Dn+Up):(char)toupper(Ch);
  }

bool CzyPalindrom(const char *napis)
  {
   for(const char *koniec=napis+strlen(napis)-1;napis<koniec;++napis,--koniec)
     {
      while((napis<koniec)&&((*napis==' ')||(*napis=='\t'))) ++napis;
      while((napis<koniec)&&((*koniec==' ')||(*koniec=='\t'))) --koniec;
      if((napis<koniec)&&(PolToUpper(*napis)!=PolToUpper(*koniec))) return false;
     }
   return true;
  }

int main()
  {
   char Napis[]="KOBYA ma maˆy bok";
//   char Napis[]="KOBY£A ma ma³y bok";

   cout<<'"'<<Napis<<"\" jest ";
   if(CzyPalindrom(Napis)) cout<<"palindromem"<<endl;
   else                    cout<<"zwyklym napisem"<<endl;

   cin.get();
   return 0;
  }
