Contact și feedback

Nu obții 100 de puncte sau ai nelămuriri în privința problemelor? Scrie-mi pe Instagram.


Ai găsit o greșeală, vrei să raportezi un utilizator sau vrei să comunici altceva? Folosește formularul de contact.


Vrei să ne transmiți o părere despre platformă? Folosește formularul de feedback.

Shortcuturi

Folosește următoarele shortcuturi pentru a naviga mai ușor pe platformă.

Generale

Meniu shortcuturi?
Căutare probleme sau utilizatori/
Navigare printre rezultatele căutării↑, ↓
Meniu de contact și feedbackCTRL + Shift + F
Ieșire din meniuriEsc

Editor probleme

Setări editorCTRL + Shift + S
Schimbare stil editorCTRL + Shift + E
Șabloane de codCTRL + Shift + 1/2/3
Golire editorCTRL + Shift + 4

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

Obține medalia mult dorită. Devino As la olimpiadă.

Curs complet de olimpiadă, pregătit de olimpici de la Oxford și TU Delft.

Cuprinsul lecției

Se încarcă…

Citește și

Cifra maximă a unui număr recursiv în C++Oglinditul unui număr în C++Numărul minim de peroane pentru o gară în C++Complexitatea unui algoritm (timp și spațiu) în C++Funcții în C++. Ce sunt subprogrameleInstrucțiunea break (structuri repetitive)Citirea și afișarea matricelor în C++Suma elementelor unui vector recursiv în C++Copiuțe: Cifrele unui numărSuma divizorilor numerelor de la 1 la N (Folosind ciurul lui Eratostene)Cifra maximă și minimă a unui număr în C++Suma numerelor naturale dintr-un interval dat în C++Numărul de divizori primi ai unui număr în C++Transformarea unui număr din baza 10 în baza 2 în C++Ce înseamnă variabilă globală și locală în C++?Verificare număr prim în C++ (Clasa a IX-a)Rădăcina cubică a unui număr în C++ (cube root)Generarea șirului Fibonacci generalizat în C++Inversarea unui vector în C++Interschimbarea a două variabile în C++ (3 metode)Tipuri de date în C++: numere întregi, reale, caractere și alteleIndicatorul lui Euler al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Prima cifră a unui număr în C++Materia pentru olimpiada de informatică - tot ce trebuie să știiInterclasarea a doi vectori în C++Verifică dacă trei puncte sunt coliniare C++Afișarea elementelor unui vector recursiv în C++Verifică dacă o literă este mică sau mare în C++Verifică dacă un număr este par sau impar fără modulo în C++Structuri repetitive (while, do while, for, etc)Matrice Fibonacci - al n-lea termen Fibonacci în timp logaritmicVectori de frecvență (de apariții) în C++Matrice în C++. Declararea și parcurgerea tablourilor bidimensionaleCe este o variabilă unsigned în C++?Transformarea unei litere mici în literă mare în C++Inversarea unui șir de caractere în C++Căutare binară în C++Transformarea unui număr din baza 2 în baza 10 în C++Instrucțiunea do while (structuri repetitive)Ce înseamnă endl în C++?Operații cu numere mari în C++ - Toate funcțiile explicateBordarea unei matrice în C++Numărul de apariții al unui număr într-un vector în C++Cel mai puțin semnificativ bit în C++Șirul lui Fibonacci în C++Transformarea unei litere mari în literă mică în C++Do while vs while în C++ - Care e diferența?Combinatorică în C++: permutări, aranjamente, combinări și alteleMaximul și minimul a două valori în C++Verificarea unui an bisect în C++Valoarea absolută (modulul) unui număr în C++Radicalul unui număr în C++ (rădăcina pătrată)Verifică dacă o literă este vocală în C++Ce este o funcție void în C++?Verifică dacă un număr aparține șirului Fibonacci în C++Codul ASCII (tabel complet)Cel mai frecvent element dintr-un șir în C++Aplicații cu ciurul lui Eratostene în C++: suma divizorilor, numărul divizorilorAria unui triunghi folosind coordonatele acestora în C++Cel mai semnificativ bit în C++De ce cer unele probleme răspunsul modulo 666013 sau modulo 1.000.000.007?Instrucțiunea continue (structuri repetitive)Instrucțiunea de decizie în C++: if, else, switch, caseAlgoritm recursiv pentru căutare binară (clasa a X-a)Maximul și minimul a n valori în C++Divide et Impera (metodă de programare C++)Cel mai mic număr cu suma cifrelor N în C++Al N-lea termen dintr-o progresie aritmeticăCifrele unui număr. Prelucrarea cifrelor unui număr în C++CMMDC recursiv a două numere naturale în C++Cum să calculezi instant 2 la puterea N în C++Numere triunghiulare. Verificarea unui număr triunghiularFuncții predefinite în C++ (matematice, șiruri de caractere)Cum să afișezi partea întreagă a unui număr real în C++Ridicarea la putere în timp logaritmic în C++. Exponențiere rapidăMaximul și minimul a trei valori în C++Cel mai mic/mare divizor prim al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Tipul struct în C++. Ce sunt structurile de date neomogeneCâte numere naturale sunt într-un interval dat? (C++)Află secolul unui an citit de la tastatură în C++Al N-lea termen dintr-o progresie geometricăIndicatorul lui Euler în C++Aflarea sumei primelor N sume GaussNumărul de divizori al unui număr în C++Șiruri de caractere în C++. Tot ce trebuie să știiVectorii în C++: declarare și parcurgereRecursivitate în C++Numărul aranjamentelor în C++ (formula aranjamentelor)Calculul combinărilor de n luate câte k (nCk) în C++Numărul de cifre ale factorialului unui numărAfișarea divizorilor primi ai unui număr în C++Numărul combinărilor în C++ (formula combinărilor)Oglinditul recursiv al unui număr în C++Verifică dacă un caracter este literă în C++Vectorii în C++: citire și afișareFactorialul unui număr în C++Verifică dacă un bit de pe o anumită poziție este 1 sau 0 în C++Numărul permutărilor în C++ (formula permutărilor)Matrice pătratice în C++. Diagonala principală și secundarăComentarii în C++Suma divizorilor unui număr în C++Maximul și minimul unui vector în C++Sortare crescătoare recursivă în C++ - Merge sort și Bubble sortCel mai mare divizor comun (CMMDC) a două numere în C++Aria și circumferința unui cerc în C++Instrucțiunea while (structuri repetitive)Suma 1 + 2 + 3 + ... + N în C++Cum să citești și să afișezi în fișiere în C++Al N-lea termen Fibonacci în C++Tutorial instalare CodeBlocks (ușor) - Introducere în informatică C++Distanța dintre două puncte în C++Verificare dacă șir de caractere este palindrom în C++Cea mai lungă secvență de elemente crescătoare în C++Verifică dacă un număr dat este o putere de 2 în C++Numărul de divizori al numerelor de la 1 la N (Folosind ciurul lui Eratostene)Mediana unui șir de valori în C++Ciurul lui Eratostene în C++Verifică dacă un caracter este cifră în C++Cifra de control a unui numărCMMMC a două numere în C++ (cel mai mic multiplu comun)Instrucțiunea for (structuri repetitive)Verificare dacă un număr este palindrom în C++Pointer în C++. Variabile de tipul char * (char steluță)Citește un șir de caractere cu spații în C++

© Drepturi de autor

Echipa InfoAs își rezervă drepturile de autor pentru conținutul acestei pagini. Copierea conținutului fără acordul scris expres al InfoAs reprezintă o încălcare a Legii 8/1996 și va fi tratată ca atare.

Trimite lecția

Toată lecția

Doar videoclipul pe YouTube

Informatica devine ușoară cu InfoAs

Intră în cont