Tipul string — un șir de caractere, gestionat pentru tine

Bază~14 min9 pași

De ce contează?

Tipul char reține o singură literă, dar un cuvânt are multe litere. Ai putea ține fiecare literă într-o variabilă separată — coșmar. string este cutia care le ține pe toate la un loc, în ordine, și își ajustează singură mărimea când adaugi sau scoți caractere.

Ce este un string?

Un string este o secvență de caractere păstrate în ordine, indexate de la 0. Spre deosebire de tablourile clasice, nu trebuie să-i fixezi dimensiunea: crește și scade automat. Pentru a-l folosi, incluzi antetul <string>.

Observația-cheie

Poziția fiecărui caracter contează. s[0] este primul caracter, s[1] al doilea, iar ultimul caracter este s[s.size() - 1]. Toată lucrul cu șiruri se bazează pe această indexare.

Pentru string s = "ALGORITM"; celulele arată așa:

s
A
L
G
O
R
I
T
M
index
0
1
2
3
4
5
6
7
Primul caracter este s[0], ultimul este s[7] = s[size()-1].

Operații de bază

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

int main() {
    string s = "ALGORITM";
    cout << s.size() << endl;         // 8 caractere
    cout << s[0] << " " << s[7] << endl; // A M
    s[0] = 'a';                       // modifici un caracter pe loc
    cout << s << endl;                // aLGORITM
    s += "!";                         // concatenare
    cout << s << endl;                // aLGORITM!
    return 0;
}

Citirea unui string

Aici se nasc cele mai multe bug-uri, deci fii atent la diferență:

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

int main() {
    string cuvant, linie;
    cin >> cuvant;        // citeste un singur cuvant (se opreste la spatiu)
    getline(cin, linie);  // citeste restul liniei
    cout << cuvant << endl;
    cout << linie << endl;
    return 0;
}
  • cin >> s citește un cuvânt — se oprește la primul spațiu sau enter.
  • getline(cin, s) citește toată linia, inclusiv spațiile.

Complexitate

OperațieTimpSpațiu
s[i] (acces caracter)O(1)O(1)
s.size()O(1)O(1)
Citire / parcurgereO(n)O(n)
s += t (concatenare)O(lungime adăugată)

Vizualizare

Un string este, vizual, un vector de caractere indexat de la 0:

s
c
o
n
c
u
r
s
index
0
1
2
3
4
5
6
primul
ultimul
„concurs” are 7 caractere; s.size() == 7, ultimul index este 6.
Greșeli frecvente

Capcane clasice cu string:

  • Amesteci cin >> și getline. După cin >> n, în buffer rămâne un \n; primul getline îl prinde și pare gol. Curăță cu cin.ignore() înainte de getline.
  • Indexare de la 1. s[s.size()] este în afara șirului (caracterul valid e s[size()-1]).
  • Compari cu == greșit gândit. La string, s == t compară conținutul corect, dar NU confunda cu compararea de pointeri din C (char*).
  • size() întoarce unsigned. s.size() - 1 pe un string gol devine un număr uriaș, nu -1. Verifică întâi că șirul nu e gol.

Recapitulare

  • string ține o secvență de caractere indexată de la 0, cu dimensiune automată.
  • cin >> citește un cuvânt; getline citește toată linia (inclusiv spațiile).
  • Ultimul caracter este s[s.size() - 1] — atenție că size() e unsigned.

Întrebarea 1 / 3

Ce reține `s.size()` pentru `string s = "abc";`?