文字列を大文字にする

C++:
文字列を大文字にする

どのようにして:

C++では、標準ライブラリを使用して文字列を大文字化することができますが、サードパーティのライブラリは必要ありません。ただし、より複雑または特定の大文字化の振る舞いについては、Boostのようなライブラリが非常に役立つことがあります。以下に両方のアプローチを説明する例を示します。

標準C++ライブラリを使用する:

#include <iostream>
#include <cctype> // std::tolower and 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は文字列操作のタスクをいくらか簡素化しますが、主に変換とケース変換のユーティリティを提供しているため、真の大文字化にはカスタムアプローチがまだ必要です。