std::string::size în C++

Returnează lungimea șirului în octeți; length() este exact același lucru.

Sintaxă
std::size_t size() const noexcept;
std::size_t length() const noexcept;

Ce face std::string::size

size() și length() sunt identice: returnează numărul de char-uri (octeți) din șir, fără un terminator. length() există pentru că sună natural pentru text; size() este numele folosit de toate containerele.

Rezultatul are tipul std::size_t, un număr fără semn. Pentru texte cu diacritice în UTF-8, numărul de octeți este mai mare decât numărul de litere vizibile.

Ce returnează

Numărul de octeți, de tip std::size_t. Operația este instantanee: lungimea este memorată, nu numărată.

Exemple

Exemplul 1: Lungimea unor texte

#include <iostream>
#include <string>

int main() {
    std::string a = "Cluj";
    std::string b = "Brașov";
    std::string c = "Ștefan cel Mare";
    std::cout << a << ": " << a.size() << '\n';
    std::cout << b << ": " << b.length() << '\n';
    std::cout << c << ": " << c.size() << '\n';
}

Rezultat

Cluj: 4
Brașov: 7
Ștefan cel Mare: 16

Exemplul 2: Numărarea literelor reale dintr-un text UTF-8

Octeții de continuare din UTF-8 au forma 10xxxxxx. Dacă îi sărim, numărăm literele.

#include <iostream>
#include <string>

std::size_t litere_utf8(const std::string& s) {
    std::size_t n = 0;
    for (unsigned char c : s) {
        if ((c & 0xC0) != 0x80) ++n;   // nu este octet de continuare
    }
    return n;
}

int main() {
    std::string text = "mătușă";
    std::cout << "octeți: " << text.size() << ", litere: " << litere_utf8(text) << '\n';
}

Rezultat

octeți: 9, litere: 6

Greșeli frecvente

  • Scrii for (int i = 0; i < s.size(); ++i): compari un număr cu semn cu unul fără semn și primești avertisment (eroare cu -Werror). Folosește std::size_t i sau bucla for (char c : s).
  • Calculezi s.size() - 1 pe un șir gol: rezultatul nu este -1, ci un număr uriaș, pentru că tipul este fără semn.

Comenzi înrudite

  • std::string: Șir de caractere care își gestionează singur memoria; atenție, lucrează cu octeți, nu cu litere.
  • std::string::empty: empty() verifică dacă șirul este gol; clear() îl golește.
  • std::string::resize: Schimbă lungimea șirului: îl taie la n caractere sau îl completează cu un caracter.
  • std::strlen: Returnează lungimea unui șir C, numărând octeții până la terminatorul \0.