Didaxis
lecție · Informatică

Cuvintele dintr-un text

Delimitare și prelucrare pe cuvinte.

Se face în:
Clasa a X-a
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 2 · rezumatul lecției

Pe scurt

Pentru a prelucra cuvintele unui text, trebuie definit ce separatori le despart. Dacă separatorul este spațiul alb, textul „Ana are mere” conține trei cuvinte. Mai multe spații între două cuvinte nu trebuie numărate ca un cuvânt gol. Semnele de punctuație cer o regulă separată: „mere,” poate fi tratat cu virgulă sau fără, potrivit enunțului.

Desen la lecția „Cuvintele dintr-un text”
2în detaliustratul 2 din 2 · pentru clasă și Bacalaureat

În detaliu

Un cuvânt este o succesiune de caractere neseparatoare, delimitată de separatori. Înainte de a prelucra cuvintele unui text, enunțul precizează separatorii: spațiul, virgula, punctul sau alte semne. Cu spațiul ca singur separator, textul „Ana are mere” conține trei cuvinte; mai multe spații între două cuvinte nu creează un cuvânt gol, iar spațiile de la început și de la sfârșit nu se numără. Prelucrarea se poate face în două moduri: parcurgând textul și reținând dacă ne aflăm într-un cuvânt, sau separând cuvintele cu funcția strtok.

Exemplul 1 — strtok. Funcția strtok desparte un tablou de caractere folosind un set de separatori și întoarce pe rând pointeri la cuvinte. Prima apelare primește șirul, apelurile următoare primesc NULL; funcția modifică șirul, înlocuind separatorii întâlniți cu terminatori nuli. Când nu mai există cuvinte, întoarce NULL.

#include <iostream>
#include <cstring>
using namespace std;
int main() {
    char s[] = "Ana, are mere.";
    int cnt = 0;
    char *p = strtok(s, " ,.");
    while (p != NULL) {
        cout << p << " ";
        ++cnt;
        p = strtok(NULL, " ,.");
    }
    cout << cnt;
    return 0;
}

Separatorii sunt spațiul, virgula și punctul. Se extrag Ana, are, mere, apoi strtok întoarce NULL. Programul afișează Ana are mere 3. Două separatoare consecutive, precum virgula și spațiul după Ana, nu produc un cuvânt gol.

Exemplul 2 — numărarea cuvintelor fără strtok. Pentru textul " Ana are mere " se parcurge șirul cu un indicator inCuvant, inițial fals. Când se întâlnește un caracter care nu este spațiu și inCuvant este fals, începe un cuvânt nou: contorul crește și inCuvant devine adevărat. Când se întâlnește un spațiu, inCuvant devine fals. Pentru text rezultă 3 cuvinte, deși există 7 spații. Metoda nu modifică șirul.

int cnt = 0;
bool inCuvant = false;
for (int i = 0; t[i] != '\0'; i++) {
    if (t[i] != ' ' && !inCuvant) {
        cnt++;
        inCuvant = true;
    } else if (t[i] == ' ')
        inCuvant = false;
}

Exemplul 3 — cel mai lung cuvânt. În textul Ana are multe mere rosii cuvintele au lungimile 3, 3, 5, 4 și 5. Se păstrează cel mai lung cuvânt găsit până acum: la fiecare cuvânt extras cu strtok se compară strlen(cuvant) cu lungimea celui memorat și se copiază cu strcpy numai dacă este strict mai lung. Rezultatul este multe; rosii, tot de lungime 5, nu îl înlocuiește, pentru că nu este strict mai lung. Dacă enunțul cere ultimul cuvânt de lungime maximă, comparația devine >=.

Semnele de punctuație. Enunțul precizează dacă punctuația face parte din cuvânt sau este separator. Cu separatorii „spațiu, virgulă, punct”, cuvântul din mere. este mere; dacă doar spațiul ar fi separator, cuvântul ar fi mere., cu punct. Setul de separatori se transmite lui strtok ca șir, în ambele apeluri, iar aceeași alegere trebuie păstrată pe tot parcursul prelucrării.

Urmărirea metodei cu inCuvant pe un text mic. Fie t = " ab c", cu caracterele de la indicii 0..5: spațiu, a, b, spațiu, spațiu, c. Valorile la sfârșitul fiecărui pas sunt:

  • , spațiu: cnt=0, inCuvant=false;
  • , a: începe un cuvânt, cnt=1, inCuvant=true;
  • , b: nu este spațiu, dar inCuvant este deja adevărat, deci contorul rămâne 1;
  • și , spații: inCuvant=false;
  • , c: începe al doilea cuvânt, cnt=2, inCuvant=true.

La final cnt=2, deși textul are 3 spații: contorul crește numai la trecerea din afara cuvântului în cuvânt. Pentru un șir vid sau format doar din spații, bucla nu crește contorul niciodată, deci rezultatul este 0. Parcurgerea citește fiecare caracter o singură dată, deci timpul este proporțional cu lungimea a textului.

Greșeli frecvente

  • Greșit: un text cu mai multe spații consecutive are cuvinte goale între ele.
    Corect: spațiile consecutive sunt un singur separator, iar cuvintele nu sunt goale.
  • Greșit: strtok nu modifică șirul inițial.
    Corect: înlocuiește separatorii cu terminatori nuli, deci șirul inițial se pierde.
  • Greșit: numărul cuvintelor este egal cu numărul spațiilor plus unu.
    Corect: formula e adevărată doar dacă nu există spații inițiale, finale sau consecutive.
în contul tăuPremium

Testează-te pe această lecție

Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.

Înainte și după

Surse și referințe

Redactare proprie, conform programei:

  • OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa X intensiv; rocnee.eu

Documente consultate

  • Programa școlară de informatică, clasa a XI-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu
  • Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 3–4; edu.ro
  • Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro

Desene: Redactare proprie (desen original), conform Programa școlară de informatică, clasa a XI-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.