Școala Româno-Britanică
Modulul 2 Clasa a X-a | C++

Ora 1: Șirul de caractere - model conceptual liniar

Ce vei învăța astăzi: Ce este un șir de caractere (o succesiune ordonată de litere, cifre și simboluri), cum este organizat ca model liniar (adică elementele stau unul după altul, fiecare având o poziție unică) și cum afișăm un șir caracter cu caracter în C++

Rezultat practic: Identifici șirul de caractere ca un model liniar de date, descrii structura lui prin poziții și scrii programe C++ care afișează un șir caracter cu caracter (Competența 1.2).

Competența 1.2 Săptămâna 5

Înainte de a începe

De ce contează? Fiecare aplicație care prelucrează text — de la un simplu verificator de cuvinte până la un motor de căutare — tratează textul ca o succesiune ordonată de caractere. Dacă înțelegi acest model liniar, întregul modul se construiește peste el.

Ce știi deja?

În clasa a IX-a ai lucrat cu tablouri unidimensionale, în care fiecare element are un indice. Cum ai reprezenta cuvântul „BAC" ca un tablou de litere? Pe ce poziție s-ar afla litera „A"?

Ideea-cheie: Un șir de caractere este un model liniar: caracterele sunt așezate unul după altul, fiecare are o poziție unică (prima este 0), iar sfârșitul șirului este marcat de terminatorul ''.
SINTEZĂ TEORETICĂ ȘI EXEMPLE GHIDATE

Ce vei învăța astăzi?

După această lecție vei înțelege ce este un șir de caractere, cum este el organizat în memorie ca un model liniar și cum îl afișăm caracter cu caracter în C++.

Definiția șirului de caractere
Pozițiile și caracterul terminator
Afișarea unui șir caracter cu caracter
Identificarea pozițiilor în șir

Ce este un șir de caractere?

Definiție: Un șir de caractere este o secvență finită de caractere, plasate într-o ordine bine stabilită. Ordinea este esențială: schimbarea ordinii caracterelor produce alt cuvânt.

În memorie, un șir este un model liniar: caracterele sunt așezate unul după altul, iar fiecare caracter are o poziție (indice) unică.

Analogia: literele unui cuvânt, în ordine

Cuvântul INFORMATICĂ este asemenea unui șirag de mărgele: fiecare mărgea este o literă, iar mărgelele sunt înșirate într-o ordine precisă. Dacă schimbi două mărgele, obții alt cuvânt.

Poziția

Numărul locului ocupat de un caracter (0, 1, 2, ...)

Caracter

O literă, o cifră sau un simbol, de exemplu 'I'

Ordine

Succesiunea fixă a caracterelor în șir

Poziție 0 1 2 3 4 5
Caracter I N F O R M

Sfârșitul unui șir: caracterul terminator

În C++, un șir de caractere se termină întotdeauna cu caracterul special '\0' (terminator de șir, cu codul 0). De aceea, pentru un șir de maximum 100 de caractere declarăm un vector de 101 poziții: 100 pentru litere și 1 pentru terminator.

De ce contează terminatorul?

Programul nu „știe" cât de lung este șirul tău: el parcurge caracterele până întâlnește '\0'. Așa află unde se termină șirul și nu afișează caractere „zombie" rămase din memorie.

Observă: caracterul '\0' nu este un spațiu și nu este literă; el este invizibil și marchează doar sfârșitul șirului.

Algoritm afișareCaracterCuCaracter citește s (șir de caractere) pentru i = 0 cât timp s[i] != '\0' execută scrie "Caracterul de pe poziția ", i, " este ", s[i] sfârșit pentru Sfârșit algoritm
C++ - Afișarea unui șir caracter cu caracter
#include <iostream>
using namespace std;

int main()
{
    char s[101] = "INFORMATICA";

    for (int i = 0; s[i] != '\0'; i++)
    {
        cout << "Caracterul de pe pozitia " << i
             << " este " << s[i] << endl;
    }

    return 0;
}

Ce învățăm: parcurgem șirul cu un for de la poziția 0, cât timp caracterul curent nu este terminatorul '\0'. Variabila i este poziția (indicele) curentă.

Lucrul cu pozițiile unui șir

Fiind un model liniar, fiecare caracter al șirului s este accesat cu s[i], unde i este poziția. Primul caracter este s[0]. Numărul total de caractere (lungimea) se poate afla cu funcția strlen (funcție care întoarce numărul de caractere reale, fără terminator) din biblioteca <cstring>.

Exemplu ghidat: primul și ultimul caracter

C++ - primul și ultimul caracter al unui șir
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    char s[101];
    cin.getline(s, 101);

    int n = strlen(s);

    cout << "Primul caracter: " << s[0] << endl;
    cout << "Ultimul caracter: " << s[n - 1] << endl;

    return 0;
}

Observă: lungimea n a șirului, dată de strlen, nu include terminatorul. Ultimul caracter real se află pe poziția n - 1.

Exercițiu de completare

Completează enunțul despre șirurile de caractere:

Un șir de caractere este o ______ finită de caractere, plasate într-o ______ bine stabilită. Fiecare caracter are o ______ unică, iar primul caracter se află pe poziția ______. Sfârșitul șirului este marcat de caracterul ______.

Bancă de cuvinte:
secvență ordine poziție 0 '\0'

Exercițiu de completare a codului

Completează programul care afișează un șir caracter cu caracter:
#include <iostream>
using namespace std;
int main()
{
    char ______[101] = "BAC";
    for (int i = 0; ______ != '\0'; i++)
    {
        cout << ______;
    }
    return ______;
}
Bancă de cuvinte:
s s[i] 0

Test de înțelegere

Test rapid - șirul de caractere:

1. Ce este un șir de caractere?

2. Pe ce poziție se află primul caracter al unui șir?

3. Care caracter marchează sfârșitul unui șir în C++?

Ai grijă la: terminatorul '\0' nu este cifra '0' (codul 48) și nici spațiul: el are codul 0 și marchează doar sfârșitul șirului. Declară întotdeauna 101 poziții pentru un șir de maximum 100 de caractere, ca să rămână loc pentru terminator.

Aprofundare

Cazuri particulare și detalii avansate:

  • Spațiul este un caracter obișnuit. În șirul "Ana are" există 7 caractere plus terminatorul; spațiul de pe poziția 3 este un caracter ca oricare altul, cu codul ASCII 32.
  • Terminatorul '\0' nu este caracterul '0'. '\0' are codul 0 și marchează sfârșitul șirului, pe când '0' este cifra zero, cu codul 48. Nu le confunda niciodată!
  • Afișarea cu cout << s: dacă afișezi tot șirul deodată, cout scrie caracterele până la '\0'. Dacă șirul nu are terminator, programul ar putea afișa și „resturi" din memorie.
  • Lungimea reală vs. dimensiunea declarată: char s[101] rezervă 101 locuri, dar lungimea logică a șirului este dată doar de pozițiile până la primul '\0'. Restul locurilor rămân nefolosite.
  • Șirul gol are ca singur conținut terminatorul pe poziția 0: s[0] = '\0', deci lungimea sa este 0.

Un șir de caractere poate fi văzut și ca un vector de caractere: fiecare element s[i] este un caracter (tip char), iar vectorul este parcurs exact ca un tablou unidimensional, cu deosebirea că oprirea se face la întâlnirea terminatorului.

APLICARE ȘI REZOLVARE DE PROBLEME

PbInfo - Afișarea caracterelor

Enunț:

Cerință: Se citește un cuvânt s (format doar din litere mici). Să se afișeze fiecare caracter al cuvântului pe câte o linie.

Date de intrare:

Programul citește de la tastatură cuvântul s.

Date de ieșire:

Programul va afișa fiecare caracter al cuvântului pe o linie separată.

Restricții și precizări:

Cuvântul are cel mult 100 de caractere.

Exemplu:

Intrare:

informatica

Ieșire:

i
n
f
o
r
m
a
t
i
c
a
Cum gândim soluția:
  1. Declarăm șirul char s[101] și îl citim cu cin >> s
  2. Parcurgem cu for cât timp s[i] != '\0'
  3. Afișăm fiecare caracter s[i] cu cout și endl
Scrie soluția în C++:
Soluție corectă:
#include <iostream>
using namespace std;

int main()
{
    char s[101];
    cin >> s;

    for (int i = 0; s[i] != '\0'; i++)
    {
        cout << s[i] << endl;
    }

    return 0;
}

Ce învățăm: terminatorul '\0' ne spune unde se termină șirul; fără el, bucla for nu s-ar opri la momentul potrivit.

PbInfo - Primul și ultimul caracter

Enunț:

Cerință: Se citește un cuvânt s (format doar din litere mici). Să se afișeze primul și ultimul caracter al cuvântului, separate printr-un spațiu.

Date de intrare:

Programul citește de la tastatură cuvântul s.

Date de ieșire:

Programul va afișa primul caracter, un spațiu și ultimul caracter.

Restricții și precizări:

Cuvântul are cel mult 100 de caractere.

Exemplu:

Intrare:

informatica

Ieșire:

i a
Cum gândim soluția:
  1. Citim cuvântul cu cin >> s
  2. Calculăm lungimea n = strlen(s) cu <cstring>
  3. Afișăm s[0] și s[n - 1]
Scrie soluția în C++:
Soluție corectă:
#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    char s[101];
    cin >> s;

    int n = strlen(s);

    cout << s[0] << " " << s[n - 1];

    return 0;
}

Ce învățăm: pozițiile 0 și n - 1 marchează capetele modelului liniar: n este lungimea șirului, fără terminator.

EXERCIȚII PRACTICE

Exercițiul Practic: modelul liniar al unui șir

Sarcini de lucru

Completează următoarele sarcini pentru a-ți consolida cunoștințele despre șirurile de caractere

Sarcina 1: Cuvântul pe verticală

Cerință: Scrie un program C++ complet care citește un cuvânt de la tastatură și afișează fiecare caracter al cuvântului pe câte o linie, folosind un for cu condiția s[i] != '\0'.

Soluție pentru Sarcina 1:
#include <iostream>
using namespace std;

int main()
{
    char s[101];
    cin >> s;

    for (int i = 0; s[i] != '\0'; i++)
    {
        cout << s[i] << endl;
    }

    return 0;
}

Verifică: pentru intrarea bac, programul afișează b, a, c, fiecare pe o linie.

Sarcina 2: Care este poziția?

Cerință: Scrie un program C++ complet care citește un cuvânt și afișează caracterul de pe poziția 3 (al patrulea caracter). Pentru intrarea informatica se afișează o.

Soluție pentru Sarcina 2:
#include <iostream>
using namespace std;

int main()
{
    char s[101];
    cin >> s;

    cout << s[3];

    return 0;
}

Verifică: pozițiile încep de la 0: s[0]='i', s[1]='n', s[2]='f', s[3]='o'.

Scrie pe caiet - De reținut

Titlul lecției

Ora 1: Șirul de caractere - model conceptual liniar

Definiția lecției

Un șir de caractere este o succesiune finită de litere, cifre și simboluri, așezate într-o ordine precisă. Ordinea este esențială: schimbarea a două caractere produce un alt cuvânt. În memorie, șirul este un model liniar: caracterele ocupă poziții consecutive, începând cu poziția 0. Sfârșitul șirului este marcat de caracterul terminator '\0', care are codul 0 și este invizibil. De aceea, pentru un șir de maximum 100 de caractere declarăm un vector de 101 poziții. Lungimea reală a șirului se află cu funcția strlen și nu include terminatorul. Orice prelucrare a textului începe cu înțelegerea acestui model liniar.

Definiții esențiale

Algoritmul cheie - pseudocod

Algoritm afișareCaracterCuCaracter citește s pentru i = 0 cât timp s[i] != '\0' execută scrie "Caracterul de pe poziția ", i, " este ", s[i] sfârșit pentru Sfârșit algoritm

Algoritmul cheie - cod C++

#include <iostream>
using namespace std;

int main()
{
    char s[101] = "INFORMATICA";

    for (int i = 0; s[i] != '\0'; i++)
    {
        cout << "Caracterul de pe pozitia " << i
             << " este " << s[i] << endl;
    }

    return 0;
}

Greșeli comune de evitat

Sfaturi practice și trucuri

Exemplu practic

Scrie un program care citește numele unui elev și afișează câte litere are, apoi prima și ultima literă. Pentru numele Ana, programul afișează: 3 litere, prima literă A, ultima literă a.

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    char nume[101];
    cin >> nume;

    int n = strlen(nume);

    cout << "Numele are " << n << " litere" << endl;
    cout << "Prima litera: " << nume[0] << endl;
    cout << "Ultima litera: " << nume[n - 1] << endl;

    return 0;
}