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.

https://i.ibb.co/h1mBSJ5/image.png

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

Autentifică-te pentru a putea comenta.

Autentifică-te