Verificare dacă șir de caractere este palindrom în C++
Dându-se un șir de caractere s[]
, să se verifice dacă este sau nu palindrom.
Exemplu. Pentru șirul capac
, răspunsul este DA
, pe când pentru șirul
copac
, răspunsul este NU
.
Ce înseamnă șir de caractere palindrom?
Un șir de caractere se numește este palindrom dacă este egal cu opusul său: primul caracter este egal cu ultimul, al doilea caracter este egal cu penultimul, și așa mai departe până la mijlocul șirului.
Cum verificăm dacă un șir este palindrom?
Vom parcurge șirul folosind o structură repetitivă cu doi indici: unul de la
începutul șirului și unul de la final. Cât timp primul indice este mai mic
decât al doilea indice, vom verifica dacă literele de pe cele două poziții
coincid și vom incrementa primul indice (i++
) și decrementa al doilea indice
(j--
). Dacă toate pozițiile coincid, atunci șirul este palindrom. În caz
contrar, dacă există cel puțin o poziție care diferă, șirul nu este palindrom.
În exemplul de mai jos, când i
ajunge pe poziția 1
și j
pe poziția 3
,
deoarece sunt literele diferite, șirul nu este palindrom.
Implementare C++
Iată codul complet care determină dacă un șir citit de la tastatură este sau
nu palindrom, folosind algoritmul descris mai sus. Am folosit funcția
strlen()
pentru a determina lungimea șirului.
#include <iostream>
#include <cstring> //Biblioteca ce conține funcția strlen()
using namespace std;
int main()
{
//Declarăm și citim șirul s
char s[101];
cin.getline(s, 101);
//Verificăm dacă este palindrom
int amGasitGreseala = 0; //Asumăm că șirul este palindrom și că nu sunt greșeli
int i = 0, j = strlen(s) - 1; //Cei doi indici: primul începe de la 0, iar al doilea de la ultimul caracter
while(i <= j) { //Mergem doar până la mijlocul șirului
if(s[i] != s[j]) { //Am găsit o pereche de caractere diferite => șirul nu poate să fie palindrom
amGasitGreseala = 1;
break;
}
i++;
j--;
}
if(amGasitGreseala == 1) { //Am găsit o greșeală => afișăm NU
cout << "NU";
} else { //În caz contrar, șirul este palindrom => afișăm DA
cout << "DA";
}
return 0;
}
Alte resurse sau bibliografie
DS
Autorul acestei lecții
Dominic Satnoianu
Această lecție a fost redactată de către Dominic Satnoianu.
© 2021 – 2025 Aspire Education Labs SRL. Toate drepturile rezervate.
Așa cum este specificat și în termeni și condiții, conținutul acestei pagini este protejat de legea drepturilor de autor și este interzisă copierea sau modificarea acestuia fără acordul scris al autorilor.
Încălcarea drepturilor de autor este o infracțiune și se pedepsește conform legii.
Comentarii 0