ab

Structuri de date

Siruri de caractere

Tipul char[], string, functii uzuale si operatii pe siruri de caractere.

Capitole Formule Teste Calculator Grafic

Tipul char[] (sir C)

char s[201];   // sir de maxim 200 caractere
cin >> s;      // citeste un cuvant (pana la spatiu)
cin.getline(s, 201);  // citeste o linie intreaga

Lungimea:

#include <cstring>
int lung = strlen(s);  // nu include '\0'

Accesare: s[0], s[1], …, s[strlen(s)-1]


Tipul string (mai simplu)

#include <string>
string s;
cin >> s;
getline(cin, s);  // citeste linie intreaga

int lung = s.length();  // sau s.size()

Operatii string:

s[i]            // acces la caracterul i (0-indexed)
s + t           // concatenare
s.substr(pos, len)  // substring din pozitia pos, lungime len
s.find("abc")   // pozitia primei aparitii (string::npos daca nu exista)
s.empty()       // true daca sirul e vid

Parcurgere sir

for (int i = 0; i < s.length(); i++)
    cout << s[i];

// range-based for:
for (char c : s)
    cout << c;

Operatii frecvente

Numarare vocale:

int voc = 0;
for (char c : s)
    if (c=='a'||c=='e'||c=='i'||c=='o'||c=='u') voc++;

Conversie litera mare <-> mica:

char mare = toupper(c);   // 'a' -> 'A'
char mica = tolower(c);   // 'A' -> 'a'

Verificare tip caracter:

isalpha(c)  // litera
isdigit(c)  // cifra
isupper(c)  // litera mare
islower(c)  // litera mica
isspace(c)  // spatiu/tab/newline

Inversarea unui sir:

// cu string:
reverse(s.begin(), s.end());

// manual:
int n = s.length();
for (int i = 0; i < n / 2; i++)
    swap(s[i], s[n - 1 - i]);

Palindrom:

bool palindrom(string s) {
    int n = s.length();
    for (int i = 0; i < n / 2; i++)
        if (s[i] != s[n - 1 - i]) return false;
    return true;
}

Comparare siruri

// string: direct cu ==, <, >
if (s == t) ...
if (s < t) ...   // ordine lexicografica

// char[]: foloseste strcmp
if (strcmp(s, t) == 0) ...  // egale
if (strcmp(s, t) < 0) ...   // s < t lexicografic

Conversie cifra <-> caracter

char c = '7';
int cifra = c - '0';   // 7 (int)

int n = 5;
char ch = '0' + n;     // '5' (char)

La examen

  • Sirul char[] se termina cu '\0' (null terminator) — nu scrie acolo
  • Foloseste string daca nu se cere explicit char[] — e mai simplu
  • s.find(...) returneaza string::npos (valoare mare) daca nu gaseste — verifica intotdeauna
  • Indexare string incepe de la 0