Zamiana liter na wielkie w łańcuchu znaków

C++:
Zamiana liter na wielkie w łańcuchu znaków

Jak to zrobić:

W C++ można kapitalizować łańcuch za pomocą biblioteki standardowej, bez potrzeby korzystania z bibliotek stron trzecich. Jednak dla bardziej skomplikowanych lub specyficznych zachowań kapitalizacji, biblioteki takie jak Boost mogą być bardzo pomocne. Poniżej znajdują się przykłady ilustrujące oba podejścia.

Korzystając z biblioteki standardowej C++:

#include <iostream>
#include <cctype> // dla std::tolower i std::toupper
#include <string>

std::string capitalizeString(const std::string& input) {
    std::string result;
    bool capitalizeNext = true;

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

    return result;
}

int main() {
    std::string text = "hello world from c++";
    std::string capitalizedText = capitalizeString(text);
    std::cout << capitalizedText << std::endl; // Wyjście: "Hello World From C++"
}

Korzystając z biblioteki Boost:

Dla bardziej zaawansowanej manipulacji łańcuchami, w tym kapitalizacji z uwzględnieniem ustawień regionalnych, warto skorzystać z biblioteki Boost String Algo.

Najpierw upewnij się, że masz zainstalowaną i skonfigurowaną bibliotekę Boost w swoim projekcie. Następnie możesz dołączyć niezbędne nagłówki i używać jej funkcji, jak pokazano poniżej.

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

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

    // kapitalizuj pierwszą literę każdego słowa
    boost::algorithm::to_lower(capitalizedText); // zapewnienie, że łańcuch jest w małych literach
    capitalizedText[0] = std::toupper(capitalizedText[0]); // kapitalizuj pierwszy znak

    for (std::size_t i = 1; i < capitalizedText.length(); ++i) {
        if (isspace(capitalizedText[i - 1])) { // kapitalizuj po spacji
            capitalizedText[i] = std::toupper(capitalizedText[i]);
        }
    }

    std::cout << capitalizedText << std::endl; // Wyjście: "Hello World From C++"
}

W tym przypadku Boost upraszcza niektóre zadania manipulacji łańcuchami, ale nadal wymaga indywidualnego podejścia do prawdziwej kapitalizacji, ponieważ głównie oferuje narzędzia do transformacji i konwersji wielkości liter.