Sari la conținut
LECȚIA 9.1 · INFORMATICĂ

Șiruri de caractere în C++

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

Conținut verificat

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'.

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'.