Sari la conținut

Capitolul 9 · Lecția 9.2 din 2

Cuvintele dintr-un text: numărare și transformări

Prelucrarea textelor cu spații: numărarea cuvintelor, inițiale și capitalizare.

Capitolul 9: Șiruri de caractereConținut verificat

Pe scurt pentru BAC · 5 idei

  • Un text care conține spații se citește întreg cu cin.getline(s, 256).
  • Textul se parcurge cu for (int i = 0; s[i] != '\0'; i++), oprindu-te la caracterul nul de la final.
  • La capitalizare schimbi doar literele mici de la început de cuvânt, folosind faptul că distanța dintre 'a' și 'A' e constantă (32).
  • Cu strtok, primul apel primește șirul, iar următoarele primesc 0; funcția pune '\0' în locul separatorilor.
  • Inițialele se afișează cu condiția de început de cuvânt, de exemplu „limba si literatura romana” dă lslr.
Pe această pagină6 secțiuni

Citirea unui text cu spații

Citirea unei linii intregi

#include <iostream>
using namespace std;

int main() {
    char s[256];
    cin.getline(s, 256);
    cout << s;
    return 0;
}

Atenție: Citirea obisnuita se opreste la primul spatiu. Pentru o linie intreaga se foloseste getline in C++, fgets in C, readln in Pascal si input in Python.

se trimit programului la citire

Numărarea cuvintelor

Un cuvânt nou începe acolo unde caracterul curent NU e spațiu, iar cel dinainte E spațiu (sau suntem la început):

Numararea cuvintelor

#include <iostream>
using namespace std;

int main() {
    char s[256];
    cin.getline(s, 256);
    int nr = 0;
    for (int i = 0; s[i] != '\0'; i++)
        if (s[i] != ' ' && (i == 0 || s[i - 1] == ' '))
            nr++;
    cout << nr;
    return 0;
}

Atenție: Un cuvant incepe acolo unde caracterul nu e spatiu dar cel dinainte era. Asa se numara corect si cand intre cuvinte sunt mai multe spatii.

se trimit programului la citire

Pentru "ana are mere" (cu două spații la mijloc): nr = 3 ✓: metoda e robustă la spații multiple.

Afișarea inițialelor

Aceeași condiție de "început de cuvânt":

Prima litera a fiecarui cuvant

#include <iostream>
using namespace std;

int main() {
    char s[256];
    cin.getline(s, 256);
    for (int i = 0; s[i] != '\0'; i++)
        if (s[i] != ' ' && (i == 0 || s[i - 1] == ' '))
            cout << s[i];
    return 0;
}
se trimit programului la citire

Pentru "limba si literatura romana": afișează lslr.

Prima literă mare la fiecare cuvânt (capitalizare)

Majuscula la inceput de cuvant

#include <iostream>
using namespace std;

int main() {
    char s[256];
    cin.getline(s, 256);
    for (int i = 0; s[i] != '\0'; i++)
        if (s[i] >= 'a' && s[i] <= 'z' && (i == 0 || s[i - 1] == ' '))
            s[i] = s[i] - 'a' + 'A';
    cout << s;
    return 0;
}

Atenție: Diferenta dintre codul unei minuscule si al majusculei corespunzatoare e 32. Pascal are upcase, Python are upper; in C si C++ se face prin scaderea lui a si adunarea lui A.

se trimit programului la citire

"ion popescu" devine "Ion Popescu". Conversia folosește aritmetica pe coduri: distanța 'a'-'A' e constantă (32).

Extragerea cuvintelor cu strtok (varianta din manuale)

Despartirea in cuvinte

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

int main() {
    char s[256];
    cin.getline(s, 256);
    char *cuv = strtok(s, " ");
    while (cuv != 0) {
        cout << cuv << "\n";
        cuv = strtok(0, " ");
    }
    return 0;
}

Atenție: Python are split, care face totul dintr-o data. In C si C++ se foloseste strtok, iar in Pascal se taie repetat cu pos, copy si delete.

se trimit programului la citire

Primul apel primește șirul, următoarele primesc 0; strtok MODIFICĂ șirul original (pune '\0' în locul separatorilor).

Reține

Condiția universală de "început de cuvânt": s[i] != ' ' && (i == 0 || s[i-1] == ' '). Cu ea rezolvi numărarea, inițialele și capitalizarea, robust la spații multiple.

Greșeli frecvente

  1. Numărarea spațiilor + 1 NU dă numărul de cuvinte când există spații consecutive sau la margini.
  2. strtok distruge șirul: fă o copie dacă îl mai folosești.
  3. Conversia la majusculă doar pentru litere mici: fără condiția a-z, strici cifrele și semnele.

Bifează când ai terminat, ca s-o vezi citită pe toate dispozitivele.

Testează-te pe capitolul 9

Lecția în clipuri

Clipuri scurte, cu voce și subtitrări.

Folosim cookie-uri esențiale, fără de care site-ul nu merge, și cookie-uri de analiză anonimizate, ca să vedem ce pagini ajută. Detalii în politica de confidențialitate