Capitalizzare una stringa

C++:
Capitalizzare una stringa

Come fare:

In C++, è possibile capitalizzare una stringa usando la libreria standard senza la necessità di librerie di terze parti. Tuttavia, per comportamenti di capitalizzazione più complessi o specifici, librerie come Boost possono essere molto utili. Di seguito sono illustrati esempi che mostrano entrambi gli approcci.

Usando la Libreria Standard C++:

#include <iostream>
#include <cctype> // per std::tolower e std::toupper
#include <string>

std::string capitalizzaStringa(const std::string& input) {
    std::string risultato;
    bool capitalizzaIlProssimo = true;

    for (char ch : input) {
        if (std::isspace(ch)) {
            capitalizzaIlProssimo = true;
        } else if (capitalizzaIlProssimo) {
            ch = std::toupper(ch);
            capitalizzaIlProssimo = false;
        }
        risultato += ch;
    }

    return risultato;
}

int main() {
    std::string testo = "hello world from c++";
    std::string testoCapitalizzato = capitalizzaStringa(testo);
    std::cout << testoCapitalizzato << std::endl; // Output: "Hello World From C++"
}

Usando la Libreria Boost:

Per manipolazioni di stringhe più avanzate, inclusa la capitalizzazione consapevole delle impostazioni locali, potresti voler usare la libreria Boost String Algo.

Prima di tutto, assicurati di avere la libreria Boost installata e configurata nel tuo progetto. Poi puoi includere gli header necessari e usare le sue funzionalità come mostrato di seguito.

#include <boost/algorithm/string.hpp>
#include <iostream>
#include <string>

int main() {
    std::string testo = "hello world from c++";
    std::string testoCapitalizzato = testo;

    // capitalizza la prima lettera di ogni parola
    boost::algorithm::to_lower(testoCapitalizzato); // assicurandosi che la stringa sia in minuscolo
    testoCapitalizzato[0] = std::toupper(testoCapitalizzato[0]); // capitalizza il primo carattere

    for (std::size_t i = 1; i < testoCapitalizzato.length(); ++i) {
        if (isspace(testoCapitalizzato[i - 1])) { // capitalizza dopo uno spazio
            testoCapitalizzato[i] = std::toupper(testoCapitalizzato[i]);
        }
    }

    std::cout << testoCapitalizzato << std::endl; // Output: "Hello World From C++"
}

In questo caso, Boost semplifica alcune delle attività di manipolazione delle stringhe ma richiede comunque un approccio personalizzato per una vera capitalizzazione, poiché offre principalmente utilità di trasformazione e conversione di maiuscolo/minuscolo.