Sari la conținut

Capitolul 9 · Lecția 9.1 din 2

Șiruri de caractere în C++

Declararea, funcțiile din cstring și prelucrările clasice cerute la BAC.

Capitolul 9: Șiruri de caractereConținut verificat

Pe scurt pentru BAC · 5 idei

  • Un șir de caractere în stil BAC este un vector de char terminat cu caracterul nul '\0'.
  • strlen(s) dă lungimea fără '\0', strcpy(d, s) copiază s în d, iar strcat(d, s) lipește s la finalul lui d.
  • strcmp(a, b) dă 0 dacă șirurile sunt egale și o valoare negativă dacă a e înaintea lui b lexicografic.
  • Cu strchr(voc, s[i]) != 0 verifici dacă un caracter apare în șirul de vocale.
  • Un caracter din intervalul 'a'...'z' devine majusculă cu s[i] = s[i] - 'a' + 'A'.
Pe această pagină4 secțiuni

Declarare

În C++ (stil BAC), un șir de caractere este un vector de tip char terminat cu caracterul nul '\0':

Citirea unui sir cu spatii

#include <iostream>
using namespace std;

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

Atenție: Citirea cu cin si operatorul de extragere se opreste la primul spatiu, deci ar lua doar primul cuvant. Pentru tot randul se foloseste getline.

se trimit programului la citire

cin >> s citește până la primul spațiu; cin.getline citește toată linia, cu spații.

Funcțiile din <cstring>

FuncțieEfect
strlen(s)lungimea (fără '\0')
strcpy(d, s)copiază s în d
strcat(d, s)lipește s la finalul lui d
strcmp(a, b)0 dacă egale; negativ dacă a înaintea lui b lexicografic
strchr(s, c)adresa primei apariții a caracterului c

Exemplu: pentru s = "BAC", strlen(s) este 3.

Prelucrări clasice

Numărarea vocalelor:

Numararea vocalelor

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

int main() {
    char s[101], voc[] = "aeiouAEIOU";
    int nr = 0;
    cin.getline(s, 101);
    for (int i = 0; i < (int)strlen(s); i++)
        if (strchr(voc, s[i]) != 0) nr++;
    cout << nr;
    return 0;
}

Atenție: Apartenenta la o multime de caractere se scrie altfel peste tot: strchr in C si C++, pos in Pascal, operatorul in la Python.

se trimit programului la citire

Pentru intrarea bacalaureat, programul afișează 6 (a, a, a, u, e, a).

Transformare literă mică în mare: s[i] = s[i] - 'a' + 'A' pentru caractere din intervalul 'a'...'z'.

Atenție

strcmp(a, b) == 0 înseamnă șiruri EGALE. Scrierea if (strcmp(a, b)) testează exact contrariul (diferite): sursa clasică de bug la BAC.

Greșeli frecvente

  1. Compararea șirurilor cu == compară adrese, nu conținut: folosește strcmp.
  2. cin >> s se oprește la spațiu: pentru propoziții folosește cin.getline.
  3. Vectorul trebuie dimensionat cu un loc în plus pentru '\0'.

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