std::string::resize în C++

Schimbă lungimea șirului: îl taie la n caractere sau îl completează cu un caracter.

Sintaxă
void resize(std::size_t n);
void resize(std::size_t n, char c);

Ce face std::string::resize

Dacă n este mai mic decât lungimea actuală, resize(n) păstrează doar primele n caractere. Dacă este mai mare, adaugă caractere la final: '\0' implicit, sau caracterul c dat.

Este util pentru a pregăti un șir de o anumită mărime înainte să-l completezi prin data(), sau pentru a tăia un text la o lungime maximă.

Parametri

Parametru Descriere
n Lungimea nouă.
c Opțional: caracterul de completare.

Ce returnează

Nimic.

Exemple

Exemplul 1: Tăiere și completare

#include <iostream>
#include <string>

int main() {
    std::string titlu = "Cum înveți C++ în 30 de zile";
    std::string scurt = titlu;
    scurt.resize(12);   // „Cum înveți” = 10 litere, dar 12 octeți
    std::cout << "[" << scurt << "]\n";

    std::string cod = "AB";
    cod.resize(6, '0');
    std::cout << "[" << cod << "]\n";
}

Rezultat

[Cum înveți]
[AB0000]

Exemplul 2: Previzualizare cu „…”

#include <iostream>
#include <string>

int main() {
    std::string descriere = "Laptop ultraportabil, 16 GB RAM, SSD 1 TB, ecran 14 inch";
    const std::size_t maxim = 24;
    if (descriere.size() > maxim) {
        descriere.resize(maxim - 3);
        descriere += "...";
    }
    std::cout << descriere << '\n';
}

Rezultat

Laptop ultraportabil,...

Greșeli frecvente

  • Tai cu resize un text cu diacritice la o lungime oarecare: dacă tăietura cade în mijlocul unei litere, textul rămâne cu un octet incomplet.
  • Mărești cu resize(n) fără caracter de completare și apoi afișezi: caracterele '\0' adăugate nu se văd, dar sunt în șir și schimbă comparațiile.

Comenzi înrudite

  • std::string::reserve: reserve rezervă memorie dinainte; capacity arată cât încape; shrink_to_fit eliberează surplusul.
  • std::string::size: Returnează lungimea șirului în octeți; length() este exact același lucru.
  • std::string::erase: Șterge o porțiune din șir, dată prin poziția de început și numărul de caractere.