PALINDROM STRING - REŠENJE

#include <iostream>
#include<string>

using namespacestd;

int main()
{
string s, s1, t;
int d, j=0;
int razlika='a'-'A';                                    //razlika u kodu između malih i velikih slova
char x,y;
    getline(cin,s);                                           //Učitava red teksta

    d=s.length();                                            //dužina teksta           
    s1=s;
for(int i=0; i<d; i++)                            //prolazi redom kroz sve karaktere
    {
if(s[i]==' ' || s[i]=='.' || s[i]==';' || s[i]==',' || s[i]=='?' || s[i]=='(' || s[i]==')' || s[i]=='!')continue;         //Ove karaktere preskače
if(s[i]>='A' && s[i]<='Z')                  //Ako su velika slova
        {
            y=s[i]+razlika;                                  //pretvara u kod za mala slova

            s1[j++]=y;                                          //pamti slovo u niz s1

        }
else                                             //Ako su velika slova
        {
            x=s[i];           
            s1[j++]=x;                              //pamti slovo u niz s1

        }
    }

bool palindrom=true;
cout<<endl;

for(int i=0; i<j/2; i++)
    {
if(s1[i]!=s1[j-1-i])                    //poredi tekuće slovo i odgovarajuće simetrično slovo, i ako su različita nije palindrom
        {
            palindrom=false;
        }
    }
if(palindrom && j>0)
    {
cout<<"da"<<endl;
    }
else
    {
cout<<"ne"<<endl;
    }

return 0;
}
Objašnjenje koda za proveru da li je string palindrom:
​

Ovaj C++ program proverava da li je dati string palindrom, što znači da se string čita isto s leva na desno i s desna na levo, ignorišući razmake i znakove interpunkcije. Evo korak-po-korak objašnjenja koda:
  1. Inicijalizacija i unos podataka:
    • Program započinje uključivanjem neophodnih biblioteka: <iostream> za ulaz i izlaz, i <string> za rad sa stringovima.
    • Deklariše se nekoliko stringova s, s1, i t, kao i promenljive d i j.
    • Promenljiva razlika se koristi za pretvaranje velikih slova u mala slova. Ova promenljiva čuva razliku u ASCII kodovima između malih i velikih slova.
  2. Učitavanje stringa:
    • getline(cin, s) koristi se za unos celog reda teksta od strane korisnika.
    • d čuva dužinu unetog stringa.
  3. Procesiranje stringa:
    • s1 je kopija originalnog stringa koja će čuvati prečišćeni string bez razmaka i znakova interpunkcije, dok će sva velika slova biti konvertovana u mala.
    • Petlja for prolazi kroz svaki karakter u stringu s:
      • Ako je karakter razmak, tačka, zapeta ili drugi interpunkcijski znak, on se preskače.
      • Ako je karakter veliko slovo, ono se konvertuje u malo slovo dodavanjem razlika na njegov ASCII kod i zatim se smešta u string s1.
      • Ako je karakter već malo slovo, on se direktno smešta u string s1.
  4. Provera palindroma:
    • Inicijalizuje se promenljiva palindrom kao true.
    • Druga petlja for prolazi kroz polovinu stringa s1 i upoređuje simetrične karaktere (prvi sa poslednjim, drugi sa pretposlednjim, itd.).
    • Ako se bilo koja dva simetrična karaktera ne podudaraju, promenljiva palindrom se postavlja na false.
  5. Izlaz rezultata:
    • Ako je promenljiva palindrom ostala true i j > 0 (što znači da je bilo validnih slova u stringu), program ispisuje "da", što znači da je string palindrom.
    • U suprotnom, ispisuje "ne".
Zaključak: Ovaj program je efikasan i tačan način za proveru da li je dati string palindrom. On uspešno uklanja nepotrebne znakove i proverava simetričnost preostalih karaktera, dajući tačan rezultat.




​