HOWTO · C++

Trova la lunghezza di una stringa in C++

Questo articolo mostra come trovare la lunghezza di una stringa in C++. Esplora vari metodi, incluse le funzioni integrate come length() e size(), nonché un approccio con un ciclo personalizzato. Impara a gestire in modo efficace i dati delle stringhe nei tuoi programmi C++ con esempi di codice pratici e spiegazioni dettagliate.

In questa pagina

Per una std::string, chiama length() o size() per ottenere il numero di elementi char memorizzati. Le due funzioni membro restituiscono lo stesso conteggio. Ad esempio, la stringa "Hello, C++!" ha 11 elementi:

#include <iostream>
#include <string>

int main() {
    const std::string message = "Hello, C++!";
    std::cout << message.length() << '\n';
}
11

Gli esempi seguenti utilizzano intestazioni C++ standard e funzioni main autonome. Ogni output mostra il conteggio stampato dal proprio esempio.

Ottenere la lunghezza di una std::string con length()

Usa length() quando vuoi chiedere a una stringa il conteggio dei suoi elementi memorizzati. Restituisce il numero di elementi char nella stringa. Quel conteggio include qualsiasi elemento nullo incorporato che faccia parte del valore memorizzato; non si ferma al primo \0 come fa una funzione per stringhe C.

Il risultato è un conteggio di elementi char, non necessariamente un conteggio di caratteri percepiti dall’utente o di punti di codice Unicode. Il testo UTF-8 può usare più elementi char per un singolo carattere visualizzato. Usa length() per la lunghezza memorizzata della stringa, e scegli un’operazione consapevole di Unicode quando l’attività richiede conteggi dei caratteri del testo.

Ottenere la lunghezza di una std::string con size()

size() restituisce lo stesso numero di length() per std::string. Scegli una delle due grafie in base alla leggibilità o al codice circostante; non è necessario preferirne una per le prestazioni. size() è anche comunemente usato con i contenitori standard, dove riporta il numero di elementi.

#include <iostream>
#include <string>

int main() {
    const std::string language = "C++ strings";
    std::cout << language.size() << '\n';
}
11

Includi <string> per usare std::string, e <iostream> quando scrivi il risultato di questo esempio in std::cout.

Contare gli elementi di una std::string con un ciclo for basato su intervallo

Un ciclo for basato su intervallo può contare ogni elemento di una stringa. Questo è utile per imparare come funziona l’iterazione o quando ogni elemento ha anche bisogno di elaborazione. Per una normale richiesta di lunghezza, length() e size() esprimono l’intento direttamente.

#include <cstddef>
#include <iostream>
#include <string>

std::size_t countElements(const std::string& value) {
    std::size_t count = 0;
    for (char element : value) {
        ++count;
    }
    return count;
}

int main() {
    const std::string value = "count me";
    std::cout << countElements(value) << '\n';
}
8

Questo ciclo visita ogni elemento char memorizzato, incluso un elemento nullo incorporato. std::size_t è il tipo senza segno standard usato per le dimensioni e gli indici dei contenitori.

Contare una stringa terminata da null con un ciclo while

Un ciclo while manuale si applica a una sequenza di caratteri terminata da null, spesso chiamata stringa C. Il ciclo avanza fino a raggiungere il carattere nullo di terminazione. Il suo puntatore deve riferirsi a una sequenza valida che contenga un terminatore; un puntatore arbitrario senza questa garanzia non può essere attraversato in modo sicuro in questo modo.

#include <cstddef>
#include <iostream>
#include <string>

std::size_t countUntilNull(const char* text) {
    std::size_t count = 0;
    while (text[count] != '\0') {
        ++count;
    }
    return count;
}

int main() {
    const std::string value = "C++ strings";
    std::cout << countUntilNull(value.c_str()) << '\n';
}
11

c_str() fornisce un puntatore a una rappresentazione terminata da null della stringa. Il ciclo conta solo la parte prima del primo carattere nullo, quindi può differire dalla lunghezza memorizzata completa quando la std::string contiene un null incorporato.

Usare std::strlen con una stringa terminata da null

La funzione della libreria C std::strlen è un’altra opzione quando l’input è già una stringa di byte valida terminata da null. Includi <cstring> per la sua dichiarazione. Conta i byte prima del primo carattere nullo, quindi non è un sostituto di length() quando hai bisogno della lunghezza memorizzata completa di una std::string che può contenere elementi nulli incorporati.

#include <cstring>
#include <iostream>
#include <string>

int main() {
    const std::string value = "C++ strings";
    std::cout << std::strlen(value.c_str()) << '\n';
}
11

Il risultato di c_str() di una std::string è terminato da null. Per un const char* autonomo, std::strlen richiede che il puntatore si riferisca a una sequenza valida terminata da null; altrimenti, la sua scansione può leggere oltre la memoria disponibile.

Scegliere il metodo giusto per la lunghezza della stringa

Per una std::string, usa length() o size() per ottenere il conteggio memorizzato dei suoi elementi char. Sono equivalenti, e <string> dichiara il tipo stringa. Usa un ciclo basato su intervallo quando insegni o elabori gli elementi mentre li conti.

Per una stringa C, usa std::strlen quando l’input è valido e terminato da null, oppure usa un ciclo while per illustrare l’attraversamento. Entrambi si fermano al primo carattere nullo. I metodi di std::string contano gli elementi memorizzati, inclusi i null incorporati; nessuno di questi conteggi deve essere confuso con un conteggio generale dei caratteri Unicode.