Hola25
Hola25 Logo
Hola25
Utilizatori disponibili

Înapoi la blog

Un șir de piese tipografice și un marcaj final sugerează parcurgerea unui text caracter cu caracter.
Ilustrație conceptuală generată cu AI; explicațiile și schemele de învățare sunt în articol.
Informatică

Șiruri de caractere la BAC: citire și parcurgere

Hola25
Hola25
Autor

21 octombrie 2026

6 min citire

În acest articol

Un șir de caractere memorat într-un tablou de tip caracter are o regulă esențială: textul se termină la primul caracter nul. La BAC, trebuie să distingi între capacitatea tabloului, lungimea textului și indicele ultimului caracter vizibil. Confundarea lor produce citiri în afara textului, pierderea spațiilor sau rezultate greșite pentru șirul vid.

Lecția privește șirurile de caractere din programa de referință pentru matematică-informatică. Exemplele folosesc caractere simple, fără diacritice, pentru ca fiecare simbol prelucrat să ocupe un singur element al tabloului. Alege apoi o cerință comparabilă din arhiva de subiecte BAC și verifică exact alfabetul permis de enunț.

Trei numere pe care nu le confunzi

Un tablou cu o sută unu elemente poate păstra un text de cel mult o sută de caractere și terminatorul său. Capacitatea este o sută unu, lungimea maximă a textului este o sută, iar ultimul indice posibil al tabloului este o sută.

Dacă textul efectiv este format din trei litere, lungimea lui este trei. Literele ocupă pozițiile zero, unu și doi, iar terminatorul ocupă poziția trei. Restul tabloului nu face parte din text și nu trebuie parcurs ca și cum ar conține litere suplimentare.

Noțiune Pentru textul bac într-un tablou de 101 elemente
Capacitate 101 elemente
Lungimea textului 3 caractere
Ultimul caracter vizibil c, la indicele 2
Terminator Caracter nul, la indicele 3

Caracterul nul nu este cifra zero și nici spațiul. Este valoarea care marchează sfârșitul șirului în reprezentarea folosită. Cifra zero dintr-un text obișnuit este un caracter vizibil și trebuie prelucrată dacă enunțul o include.

Citirea unui cuvânt și citirea unei linii

O citire obișnuită cu operatorul de extragere se oprește la spațiu. Pentru un singur cuvânt, acesta poate fi comportamentul dorit. Pentru o propoziție, aceeași citire ar păstra numai primul cuvânt și ar pierde restul din perspectiva prelucrării imediate.

Citirea unei linii permite păstrarea spațiilor dintre cuvinte. În exemplul nostru folosim o funcție care citește până la sfârșitul liniei, fără să includă separatorul de linie în text. Presupunem că enunțul garantează cel mult o sută de caractere.

Dacă înaintea textului ai citit un număr, separatorul de linie poate rămâne în flux. O citire imediată a liniei poate găsi acel separator și poate produce un șir vid. Rezolvarea trebuie raportată la formatul datelor: consumi separatorul rămas fără să elimini arbitrar spații care ar putea aparține textului.

Parcurgerea până la terminator

Pornim de la indicele zero și continuăm cât timp caracterul curent nu este nul. Fiecare pas prelucrează un caracter real al textului. La oprire, indicele curent este chiar lungimea șirului.

Pentru textul vid, primul element este deja terminatorul. Bucla nu execută niciun pas, iar lungimea rămâne zero. Acesta este un comportament corect, nu o situație care cere accesarea unui presupus prim caracter.

Programul următor calculează lungimea și numărul spațiilor obișnuite, apoi afișează textul în ordine inversă. Citește o singură linie cu cel mult o sută de caractere ASCII. Tabul nu este numărat ca spațiu în această cerință.

#include <iostream>
using namespace std;

int main() {
    char s[101];
    cin.getline(s, 101);
    int lungime = 0, spatii = 0;
    while (s[lungime] != '\0') {
        if (s[lungime] == ' ') ++spatii;
        ++lungime;
    }
    cout << lungime << ' ' << spatii << '\n';
    for (int i = lungime - 1; i >= 0; --i)
        cout << s[i];
    return 0;
}

Indicele pentru afișarea inversă este un întreg cu semn. Când textul este vid, el pornește de la minus unu, iar condiția buclei este falsă. Un indice fără semn ar necesita altă organizare pentru a evita scăderea sub zero.

Urmărirea unui exemplu

Pentru linia formată din litera a, un spațiu, cifra doi și litera b, lungimea este patru și numărul spațiilor este unu. Afișarea inversă produce litera b, cifra doi, spațiul și litera a.

Spațiul participă la lungime, chiar dacă nu este o literă. Cifra participă și ea. Lungimea textului numără caracterele reprezentării date, nu cuvintele, literele distincte sau simbolurile care îndeplinesc o anumită condiție.

După fiecare pas al primei bucle, contorul de spații descrie exact prefixul deja parcurs. Când ajungem la terminator, prefixul parcurs este întregul text. Această explicație leagă variabilele de cerință și te ajută să verifici o modificare ulterioară.

Lungime calculată o dată sau repetat

Dacă ai nevoie de lungime în mai multe locuri și textul nu se schimbă, o poți calcula o singură dată. O funcție de calcul al lungimii parcurge șirul până la terminator; nu trebuie presupus că rezultatul apare fără prelucrare.

Apelarea repetată a unei astfel de funcții în condiția unei bucle poate duce la parcurgeri suplimentare ale aceluiași text. Pentru o lecție despre eficiență, diferența dintre un calcul unic și unul repetat este relevantă chiar dacă textele de test sunt scurte.

Dacă ștergi sau inserezi caractere, lungimea memorată anterior trebuie actualizată ori recalculată la momentul potrivit. O valoare corectă înaintea modificării nu devine automat corectă și după ea.

Ce înseamnă afișare inversă

Programul afișează caracterele în ordine inversă, dar nu modifică tabloul. După afișare, textul memorat este același. Dacă o cerință ulterioară folosește șirul, acesta nu a fost inversat în memorie.

Pentru inversarea efectivă, ai putea schimba primul caracter cu ultimul, al doilea cu penultimul și așa mai departe, oprindu-te la mijloc. Terminatorul rămâne la aceeași poziție, deoarece lungimea nu se schimbă.

Nu confunda inversarea caracterelor cu inversarea ordinii cuvintelor. Textul cu două cuvinte ar avea literele fiecărui cuvânt inversate în primul caz. În al doilea, cuvintele și-ar păstra literele, dar și-ar schimba pozițiile.

Teste care descoperă erori

Testează un text vid, un singur caracter, un text cu spații și un text care conține cifra zero. Aceste exemple separă clar terminatorul de caracterele obișnuite și verifică limitele buclelor.

Un text format numai din spații are lungime pozitivă, chiar dacă nu conține cuvinte. Un text fără spații poate avea mai multe cifre sau semne de punctuație. Fiecare contor trebuie să respecte proprietatea cerută, nu o impresie vizuală asupra textului.

Pentru limita maximă, verifică dacă tabloul lasă loc terminatorului. O capacitate egală cu lungimea maximă permisă a textului este insuficientă în această reprezentare. Aceasta este o condiție de memorie, nu o convenție de stil.

Exerciții cu răspunsuri

Textul este a b c. Lungimea este cinci, numărul spațiilor este doi, iar afișarea inversă este c b a.

Textul este 0. Lungimea este unu, nu zero. Caracterul vizibil reprezintă cifra zero și este diferit de terminator.

Textul conține două spații și nimic altceva. Lungimea și numărul spațiilor sunt ambele doi. Bucla trebuie să viziteze ambele poziții înainte de oprire.

Întrebări frecvente

Ultimul caracter are indice egal cu lungimea?

Nu. Pentru un șir nevid indexat de la zero, ultimul caracter vizibil are indicele lungime minus unu. La indicele egal cu lungimea se află terminatorul.

Pot aplica exemplul direct textelor cu diacritice?

Nu fără să verifici codificarea. În UTF-8, o literă cu diacritică poate ocupa mai mulți octeți, iar parcurgerea simplă a tabloului nu numără automat literele percepute de cititor. Respectă alfabetul precizat în problemă.

Cum învăț fără să încurc citirea și prelucrarea?

Verifică întâi textul citit, apoi urmărește indicii pe hârtie. Această separare sprijină învățarea prin înțelegere; pentru un program propriu poți cere explicații unui profesor de informatică.

Surse