PALINDROM STRING - REŠENJE
#include <iostream>
#include<string>
using namespace std;
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;
}
#include<string>
using namespace std;
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:
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:
- 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.
- Učitavanje stringa:
- getline(cin, s) koristi se za unos celog reda teksta od strane korisnika.
- d čuva dužinu unetog stringa.
- 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.
- 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.
- 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".