
//
// To jest przykładowy kod z podrozdziału 18.6.2 „Wykorzystanie tablic” książki
// "Programowanie. Teoria i praktyka z wykorzystaniem C++" Bjarne'a Stroustrupa.
//

#include "std_lib_facilities.h"

//------------------------------------------------------------------------------

bool is_palindrome(const char s[], int n)
// s wskazuje pierwszy znak tablicy n znaków.
{
    int first = 0;         // Indeks pierwszej litery.
    int last = n-1;        // Indeks ostatniej litery.
    while (first < last) { // Nie doszliśmy jeszcze do środka.
        if (s[first]!=s[last]) return false;
        ++first;           // Przesuwa w przód.
        --last;            // Przesuwa wstecz.
    }
    return true;
}

//------------------------------------------------------------------------------

istream& read_word(istream& is, char* buffer, int max)
// Wczytuje najwyżej max–1 znaków z is do bufora.
{
    is.width(max);         // Wczytuje najwyżej max–1 znaków w znajdującym się dalej >>.
    is >> buffer;          // Wczytuje zakończone spacją słowo,
                           // i dodaje zero za ostatnim znakiem wczytanym do p.
    return is;
}

//------------------------------------------------------------------------------

int main()
{
    const int max = 128;
    char s[max];
    while (read_word(cin,s,max)) { 
        cout << s;
        if (!is_palindrome(s,strlen(s))) cout << " nie";
        cout << " jest palindromem.\n";
    }
}

//------------------------------------------------------------------------------
