Зробити першу літеру рядка великою

C++:
Зробити першу літеру рядка великою

Як:

У C++, ви можете зробити рядок заголовним за допомогою стандартної бібліотеки без необхідності використання сторонніх бібліотек. Однак, для більш складних або специфічних поведінок перетворення на заголовний регістр, бібліотеки, як-от Boost, можуть бути дуже корисними. Нижче наведено приклади, що ілюструють обидва підходи.

Використання стандартної бібліотеки C++:

#include <iostream>
#include <cctype> // для std::tolower та 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; // Результат: "Hello World From C++"
}

Використання бібліотеки Boost:

Для більш складної маніпуляції з рядками, включаючи чутливе до локалі перетворення на заголовний регістр, вам може знадобитися використовувати бібліотеку Boost String Algo.

Спочатку переконайтеся, що у вашому проєкті встановлено та налаштовано бібліотеку Boost. Після цього можна підключити необхідні заголовочні файли та використовувати її можливості, як показано нижче.

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

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

    // перетворює першу літеру кожного слова на велику
    boost::algorithm::to_lower(capitalizedText); // переконуємося, що рядок у нижньому регістрі
    capitalizedText[0] = std::toupper(capitalizedText[0]); // робимо перший символ великою літерою

    for (std::size_t i = 1; i < capitalizedText.length(); ++i) {
        if (isspace(capitalizedText[i - 1])) { // робимо велику літеру після пробілу
            capitalizedText[i] = std::toupper(capitalizedText[i]);
        }
    }

    std::cout << capitalizedText << std::endl; // Результат: "Hello World From C++"
}

У цьому випадку, Boost спрощує деякі завдання маніпуляції з рядками, але все ж вимагає спеціального підходу для справжнього перетворення на заголовний регістр, оскільки в основному пропонує утиліти для трансформації та конвертації регістру.