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ștestd::size_t isau buclafor (char c : s). - Calculezi
s.size() - 1pe 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.