【C++】toupper関数を全解説!7つの具体的な使い方で完全網羅 – JPSM

【C++】toupper関数を全解説!7つの具体的な使い方で完全網羅

C++のtoupper関数を徹底解説するイメージC++

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

このサービスは複数のSSPによる協力の下、運営されています。

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

また、理解しにくい説明や難しい問題に躓いても、JPSMがプログラミングの解説に特化してオリジナルにチューニングした画面右下のAIアシスタントに質問していだければ、特殊な問題でも指示に従い解決できるように作ってあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

C++のtoupper関数について学ぶことは、プログラミングの世界での文字操作の基本を理解する上で非常に重要です。

この記事では、toupper関数の基本から応用までを段階的に、そして詳細に解説していきます。

この記事を読めば、初心者から上級者まで、C++における文字の大文字変換の方法を習得することができます。

●toupper関数の基本

C++の標準ライブラリには、文字列や文字を操作するための多くの関数が含まれています。

その中でも、toupper関数は特に重要であり、1文字を大文字に変換する機能を持っています。

この関数はヘッダファイルに定義されており、単一の文字を引数として受け取り、その文字がアルファベットの小文字であれば対応する大文字を返します。

もしアルファベットの小文字でなければ、引数として与えられた文字をそのまま返します。

例えば、’a’をtoupper関数に渡すと、’A’が返されます。

しかし、’1’や’!’といったアルファベット以外の文字を渡した場合は、その文字がそのまま返されます。

これは、toupper関数がアルファベットの文字にのみ作用するためです。

○toupper関数の基本的な使い方

toupper関数の基本的な使い方は非常にシンプルです。

まず、プログラムの冒頭でヘッダをインクルードする必要があります。

これにより、toupper関数を利用するための準備が整います。

次に、toupper関数に変換したい文字を引数として渡します。戻り値として、変換後の文字が得られます。

例えば、下記のように書くことで、小文字の’a’を大文字の’A’に変換することができます。

#include <cctype>
#include <iostream>

int main() {
    char smallLetter = 'a';
    char capitalLetter = toupper(smallLetter);
    std::cout << capitalLetter << std::endl; // 出力は 'A'
}

このコードでは、まずヘッダをインクルードし、続いてmain関数内で小文字の’a’を変数smallLetterに格納しています。

その後、toupper関数を用いてこの小文字を大文字に変換し、変換後の大文字が変数capitalLetterに格納されます。

最後に、std::coutを用いてこの大文字を出力しています。

このコードを実行すると、コンソールには大文字の’A’が表示されます。

●toupper関数の詳細な使い方

C++でのtoupper関数の使い方をより深く理解するためには、実際のコード例を通じて学ぶことが効果的です。

ここでは、toupper関数を使ってさまざまな文字変換を行う方法について説明します。

ここでは、文字列全体を大文字に変換する基本的な方法から、より複雑な条件に基づく大文字変換の方法までを紹介します。

○サンプルコード1:文字列の大文字変換

文字列全体を大文字に変換する最も基本的な使い方は、文字列を構成する各文字に対してtoupper関数を適用することです。

下記のサンプルコードは、文字列内の各文字を大文字に変換する方法を表しています。

#include <cctype>
#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    for (char &c : str) {
        c = toupper(c);
    }
    std::cout << str << std::endl; // 出力は 'HELLO, WORLD!'
}

このコードでは、まずstring型の変数strに文字列”Hello, World!”を代入しています。

その後、範囲ベースのforループを用いて文字列strの各文字に対してtoupper関数を適用しています。

この処理により、strの各文字が大文字に変換されます。最後に、変換後の文字列がコンソールに出力されます。

○サンプルコード2:条件に基づく大文字変換

より高度な使い方として、特定の条件に基づいて文字を大文字に変換する方法があります。

例えば、アルファベットの文字のみを大文字に変換し、それ以外の文字は変換しないという処理を行うことができます。

下記のサンプルコードは、アルファベットの文字のみを大文字に変換する方法を表しています。

#include <cctype>
#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World! 123";
    for (char &c : str) {
        if (isalpha(c)) {
            c = toupper(c);
        }
    }
    std::cout << str << std::endl; // 出力は 'HELLO, WORLD! 123'
}

このコードでは、isalpha関数を用いて各文字がアルファベットであるかどうかを判断しています。

isalpha関数がtrueを返す場合、つまり文字がアルファベットの場合にのみ、toupper関数を適用しています。

この処理により、アルファベットの文字のみが大文字に変換され、数字や記号などの他の文字はそのまま保持されます。

●toupper関数の応用例

C++のtoupper関数は、基本的な文字変換を超えて、さまざまな応用が可能です。

ここでは、ユーザー入力の処理、ファイルからのデータ読み取り、さらには文字列の大文字と小文字を切り替えるトグル機能など、いくつかの応用例を紹介します。

○サンプルコード3:ユーザー入力の大文字変換

ユーザーからの入力を受け取り、その入力を大文字に変換する場合、toupper関数が非常に役立ちます。

下記のサンプルコードは、ユーザーからの文字列入力を大文字に変換する方法を表しています。

#include <cctype>
#include <iostream>
#include <string>

int main() {
    std::string userInput;
    std::cout << "Enter a string: ";
    std::getline(std::cin, userInput);
    for (char &c : userInput) {
        c = toupper(c);
    }
    std::cout << "Converted to uppercase: " << userInput << std::endl;
}

このコードでは、まずユーザーに文字列の入力を促し、入力された文字列を変数userInputに格納しています。

その後、範囲ベースのforループを用いて文字列の各文字にtoupper関数を適用し、大文字に変換しています。

最終的に、変換後の文字列が出力されます。

○サンプルコード4:ファイルデータの大文字変換

ファイルから読み込んだデータを大文字に変換することも、toupper関数の一般的な使用例です。

下記のサンプルコードは、ファイルからテキストを読み込み、それを大文字に変換する方法を表しています。

#include <cctype>
#include <fstream>
#include <iostream>
#include <string>

int main() {
    std::ifstream file("example.txt");
    std::string line;
    while (std::getline(file, line)) {
        for (char &c : line) {
            c = toupper(c);
        }
        std::cout << line << std::endl;
    }
}

このコードでは、ifstreamオブジェクトを使用してファイルから行単位でテキストを読み込み、読み込んだ各行に対してtoupper関数を適用しています。

これにより、ファイルの内容が大文字に変換され、コンソールに出力されます。

○サンプルコード5:文字列の大文字/小文字変換トグル

最後に、文字列内の文字を大文字と小文字の間で切り替えるトグル機能の実装方法を見てみましょう。

この応用例では、大文字は小文字に、小文字は大文字に変換されます。

#include <cctype>
#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    for (char &c : str) {
        c = isupper(c) ? tolower(c) : toupper(c);
    }
    std::cout << str << std::endl; // 出力は 'hELLO, wORLD!'
}

このコードでは、isupper関数を使って各文字が大文字かどうかを判断し、大文字の場合はtolower関数を使って小文字に、小文字の場合はtoupper関数を使って大文字に変換しています。

このようにして、文字列内の各文字の大文字と小文字をトグルします。

最終的に、変換後の文字列が出力されます。

●注意点と対処法

C++のtoupper関数を利用する際には、いくつかの注意点があります。

これらを理解し、適切に対処することで、プログラミングの効率と正確性を高めることができます。

○非アルファベット文字の扱い

toupper関数は、アルファベットの小文字を大文字に変換する機能を持っていますが、アルファベット以外の文字には影響を与えません。

数字や記号、特殊文字など、アルファベット以外の文字が含まれる場合、これらの文字は変換されずにそのまま残ります。

これは、toupper関数がアルファベットの文字のみを対象としているためです。

例えば、数字や記号を含む文字列をtoupper関数で処理した場合、下記のような結果になります。

#include <cctype>
#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World! 123";
    for (char &c : str) {
        c = toupper(c);
    }
    std::cout << str << std::endl; // 出力は 'HELLO, WORLD! 123'
}

このコードでは、”Hello, World! 123″という文字列内のアルファベットの文字のみが大文字に変換され、数字や記号はそのままです。

○ロケールの影響

C++の標準ライブラリは、ロケールに基づく動作をサポートしています。

toupper関数も、現在のロケール設定によっては異なる動作をする可能性があります。

特に、異なる言語環境でのアルファベットの取り扱いに注意が必要です。

例えば、トルコ語では、小文字の’i’を大文字に変換すると’İ’になり、英語の’I’とは異なります。

これを適切に扱うためには、プログラム実行時のロケール設定を考慮する必要があります。

ロケールに依存しない動作を保証するためには、C++の標準ライブラリのロケール設定を適切に管理するか、ロケールに依存しない独自の文字変換関数を実装することを検討する必要があります。

●カスタマイズ方法

C++の標準ライブラリのtoupper関数は非常に便利ですが、特定のニーズに合わせてカスタマイズすることも可能です。

ここでは、toupper関数の機能を拡張する方法と、独自の大文字変換関数を作成する方法について説明します。

○toupper関数の拡張

既存のtoupper関数に追加の機能を組み込むことで、特定のケースに対応するカスタマイズが可能です。

例えば、特定の文字を除外して大文字に変換しないような機能を追加することができます。

下記のサンプルコードは、特定の文字(この例では’e’)を除外して大文字変換するカスタマイズされたtoupper関数の例です。

#include <cctype>
#include <iostream>
#include <string>

char customToupper(char c) {
    if (c != 'e') {
        return toupper(c);
    }
    return c;
}

int main() {
    std::string str = "Hello, World!";
    for (char &c : str) {
        c = customToupper(c);
    }
    std::cout << str << std::endl; // 出力は 'HEllo, World!'
}

このカスタマイズされたtoupper関数では、’e’以外の文字を大文字に変換しており、’e’はそのまま残しています。

○独自の大文字変換関数の作成

完全に独自の大文字変換関数を作成することも、C++では可能です。

これにより、より複雑な変換ロジックや、特定の言語や環境に特化した変換処理を実装することができます。

下記のサンプルコードは、基本的な独自の大文字変換関数の例です。

#include <iostream>
#include <string>

char myToupper(char c) {
    if (c >= 'a' && c <= 'z') {
        return c - 'a' + 'A';
    }
    return c;
}

int main() {
    std::string str = "Hello, World!";
    for (char &c : str) {
        c = myToupper(c);
    }
    std::cout << str << std::endl; // 出力は 'HELLO, WORLD!'
}

この関数では、小文字のアルファベットを大文字に変換する基本的なロジックを実装しています。

まとめ

この記事では、C++のtoupper関数の基本的な使い方から応用例、さらには注意点やカスタマイズ方法までを網羅的に解説しました。

toupper関数は文字変換において非常に便利なツールですが、その機能を最大限に活用するためには、関数の特性や挙動を正確に理解することが重要です。

また、特定のニーズに合わせてカスタマイズすることで、更に幅広い用途に適用することが可能です。

このガイドを参考にして、C++における文字変換のスキルをさらに高めていただければ幸いです。