[C言語] アルファベットの大文字と小文字を相互に変換する方法を解説
C言語でアルファベットの大文字と小文字を相互に変換するには、toupper関数とtolower関数を使用します。
これらの関数はctype.hヘッダファイルに定義されており、文字を引数として受け取り、変換された文字を返します。
例えば、toupper('a')は’A’を返し、tolower('A')は’a’を返します。
これにより、文字列内の各文字をループで処理し、必要に応じて大文字または小文字に変換することが可能です。
アルファベット文字の基本
アルファベットは、英語をはじめとする多くの言語で使用される文字セットで、26文字の大文字と小文字から構成されています。
C言語では、これらの文字はASCIIコードを用いて表現されます。
ASCIIコードは、各文字に一意の数値を割り当てることで、コンピュータが文字を理解し、処理できるようにするための標準的な方法です。
大文字の’A’から’Z’はASCIIコード65から90、小文字の’a’から’z’は97から122に対応しています。
これにより、C言語では文字の変換や比較が容易に行えます。
大文字と小文字の変換は、特にテキスト処理やユーザー入力の正規化において重要な役割を果たします。
この記事では、C言語を用いてアルファベットの大文字と小文字を相互に変換する方法について詳しく解説します。
大文字から小文字への変換
アルファベットの大文字を小文字に変換する方法は、C言語ではいくつか存在します。
ここでは、ASCIIコードを用いた方法、標準ライブラリのtolower関数を使用する方法、そしてループを用いて文字列全体を変換する方法について解説します。
ASCIIコードを用いた変換方法
ASCIIコードを用いると、大文字を小文字に変換することができます。
大文字のアルファベットは小文字のアルファベットよりも32小さい値を持っているため、これを利用して変換を行います。
#include <stdio.h>
int main() {
    char uppercase = 'A'; // 大文字のA
    char lowercase = uppercase + 32; // 小文字に変換
    printf("大文字: %c, 小文字: %c\n", uppercase, lowercase);
    return 0;
}大文字: A, 小文字: aこの方法は、文字がアルファベットであることが前提となります。
非アルファベット文字に対しては適用しないよう注意が必要です。
tolower関数の使用方法
C言語の標準ライブラリには、tolowerという便利な関数が用意されています。
この関数は、指定した文字が大文字であれば小文字に変換し、そうでなければそのまま返します。
#include <stdio.h>
#include <ctype.h> // tolower関数を使用するために必要
int main() {
    char uppercase = 'B'; // 大文字のB
    char lowercase = tolower(uppercase); // 小文字に変換
    printf("大文字: %c, 小文字: %c\n", uppercase, lowercase);
    return 0;
}大文字: B, 小文字: btolower関数は、非アルファベット文字に対しても安全に使用でき、変換が必要ない場合はそのままの文字を返します。
ループを用いた文字列全体の変換
文字列全体を大文字から小文字に変換するには、ループを用いて各文字を変換する方法が一般的です。
#include <stdio.h>
#include <ctype.h> // tolower関数を使用するために必要
int main() {
    char str[] = "HELLO WORLD"; // 大文字の文字列
    int i = 0;
    while (str[i] != '#include <stdio.h>
#include <ctype.h> // tolower関数を使用するために必要
int main() {
char str[] = "HELLO WORLD"; // 大文字の文字列
int i = 0;
while (str[i] != '\0') { // 文字列の終端までループ
str[i] = tolower(str[i]); // 各文字を小文字に変換
i++;
}
printf("小文字の文字列: %s\n", str);
return 0;
}
') { // 文字列の終端までループ
        str[i] = tolower(str[i]); // 各文字を小文字に変換
        i++;
    }
    printf("小文字の文字列: %s\n", str);
    return 0;
}小文字の文字列: hello worldこの方法では、文字列の各文字を順にtolower関数で変換し、結果を元の文字列に反映させます。
これにより、文字列全体を効率的に小文字に変換することができます。
小文字から大文字への変換
小文字のアルファベットを大文字に変換する方法も、C言語ではいくつか存在します。
ここでは、ASCIIコードを用いた方法、標準ライブラリのtoupper関数を使用する方法、そしてループを用いて文字列全体を変換する方法について解説します。
ASCIIコードを用いた変換方法
ASCIIコードを用いると、小文字を大文字に変換することができます。
小文字のアルファベットは大文字のアルファベットよりも32大きい値を持っているため、これを利用して変換を行います。
#include <stdio.h>
int main() {
    char lowercase = 'a'; // 小文字のa
    char uppercase = lowercase - 32; // 大文字に変換
    printf("小文字: %c, 大文字: %c\n", lowercase, uppercase);
    return 0;
}小文字: a, 大文字: Aこの方法は、文字がアルファベットであることが前提となります。
非アルファベット文字に対しては適用しないよう注意が必要です。
toupper関数の使用方法
C言語の標準ライブラリには、toupperという便利な関数が用意されています。
この関数は、指定した文字が小文字であれば大文字に変換し、そうでなければそのまま返します。
#include <stdio.h>
#include <ctype.h> // toupper関数を使用するために必要
int main() {
    char lowercase = 'b'; // 小文字のb
    char uppercase = toupper(lowercase); // 大文字に変換
    printf("小文字: %c, 大文字: %c\n", lowercase, uppercase);
    return 0;
}小文字: b, 大文字: Btoupper関数は、非アルファベット文字に対しても安全に使用でき、変換が必要ない場合はそのままの文字を返します。
ループを用いた文字列全体の変換
文字列全体を小文字から大文字に変換するには、ループを用いて各文字を変換する方法が一般的です。
#include <stdio.h>
#include <ctype.h> // toupper関数を使用するために必要
int main() {
    char str[] = "hello world"; // 小文字の文字列
    int i = 0;
    while (str[i] != '#include <stdio.h>
#include <ctype.h> // toupper関数を使用するために必要
int main() {
char str[] = "hello world"; // 小文字の文字列
int i = 0;
while (str[i] != '\0') { // 文字列の終端までループ
str[i] = toupper(str[i]); // 各文字を大文字に変換
i++;
}
printf("大文字の文字列: %s\n", str);
return 0;
}
') { // 文字列の終端までループ
        str[i] = toupper(str[i]); // 各文字を大文字に変換
        i++;
    }
    printf("大文字の文字列: %s\n", str);
    return 0;
}大文字の文字列: HELLO WORLDこの方法では、文字列の各文字を順にtoupper関数で変換し、結果を元の文字列に反映させます。
これにより、文字列全体を効率的に大文字に変換することができます。
変換の実装例
ここでは、アルファベットの大文字と小文字の変換を実際にプログラムとして実装する例を紹介します。
単一の文字を変換するプログラム、文字列全体を変換するプログラム、そしてユーザーからの入力を受け取って変換するプログラムを順に解説します。
単一文字の変換プログラム
単一の文字を大文字から小文字、または小文字から大文字に変換するプログラムを作成します。
#include <stdio.h>
#include <ctype.h> // tolower, toupper関数を使用するために必要
int main() {
    char ch = 'C'; // 変換したい文字
    char lower = tolower(ch); // 小文字に変換
    char upper = toupper(ch); // 大文字に変換
    printf("元の文字: %c, 小文字: %c, 大文字: %c\n", ch, lower, upper);
    return 0;
}元の文字: C, 小文字: c, 大文字: Cこのプログラムでは、tolowerとtoupperを用いて、単一の文字をそれぞれ小文字と大文字に変換しています。
文字列全体の変換プログラム
文字列全体を大文字から小文字、または小文字から大文字に変換するプログラムを作成します。
#include <stdio.h>
#include <ctype.h> // tolower, toupper関数を使用するために必要
int main() {
    char str[] = "Hello, World!"; // 変換したい文字列
    int i = 0;
    // 小文字に変換
    while (str[i] != '#include <stdio.h>
#include <ctype.h> // tolower, toupper関数を使用するために必要
int main() {
char str[] = "Hello, World!"; // 変換したい文字列
int i = 0;
// 小文字に変換
while (str[i] != '\0') {
str[i] = tolower(str[i]);
i++;
}
printf("小文字の文字列: %s\n", str);
// 大文字に変換
i = 0;
while (str[i] != '\0') {
str[i] = toupper(str[i]);
i++;
}
printf("大文字の文字列: %s\n", str);
return 0;
}
') {
        str[i] = tolower(str[i]);
        i++;
    }
    printf("小文字の文字列: %s\n", str);
    // 大文字に変換
    i = 0;
    while (str[i] != '#include <stdio.h>
#include <ctype.h> // tolower, toupper関数を使用するために必要
int main() {
char str[] = "Hello, World!"; // 変換したい文字列
int i = 0;
// 小文字に変換
while (str[i] != '\0') {
str[i] = tolower(str[i]);
i++;
}
printf("小文字の文字列: %s\n", str);
// 大文字に変換
i = 0;
while (str[i] != '\0') {
str[i] = toupper(str[i]);
i++;
}
printf("大文字の文字列: %s\n", str);
return 0;
}
') {
        str[i] = toupper(str[i]);
        i++;
    }
    printf("大文字の文字列: %s\n", str);
    return 0;
}小文字の文字列: hello, world!
大文字の文字列: HELLO, WORLD!このプログラムでは、文字列全体をループで処理し、tolowerとtoupperを用いてそれぞれ小文字と大文字に変換しています。
入力を受け取って変換するプログラム
ユーザーからの入力を受け取り、その文字列を大文字または小文字に変換するプログラムを作成します。
#include <stdio.h>
#include <ctype.h> // tolower, toupper関数を使用するために必要
int main() {
    char str[100]; // 入力を格納する配列
    int i = 0;
    printf("文字列を入力してください: ");
    fgets(str, sizeof(str), stdin); // 標準入力から文字列を取得
    // 小文字に変換
    while (str[i] != '#include <stdio.h>
#include <ctype.h> // tolower, toupper関数を使用するために必要
int main() {
char str[100]; // 入力を格納する配列
int i = 0;
printf("文字列を入力してください: ");
fgets(str, sizeof(str), stdin); // 標準入力から文字列を取得
// 小文字に変換
while (str[i] != '\0') {
str[i] = tolower(str[i]);
i++;
}
printf("小文字の文字列: %s\n", str);
// 大文字に変換
i = 0;
while (str[i] != '\0') {
str[i] = toupper(str[i]);
i++;
}
printf("大文字の文字列: %s\n", str);
return 0;
}
') {
        str[i] = tolower(str[i]);
        i++;
    }
    printf("小文字の文字列: %s\n", str);
    // 大文字に変換
    i = 0;
    while (str[i] != '#include <stdio.h>
#include <ctype.h> // tolower, toupper関数を使用するために必要
int main() {
char str[100]; // 入力を格納する配列
int i = 0;
printf("文字列を入力してください: ");
fgets(str, sizeof(str), stdin); // 標準入力から文字列を取得
// 小文字に変換
while (str[i] != '\0') {
str[i] = tolower(str[i]);
i++;
}
printf("小文字の文字列: %s\n", str);
// 大文字に変換
i = 0;
while (str[i] != '\0') {
str[i] = toupper(str[i]);
i++;
}
printf("大文字の文字列: %s\n", str);
return 0;
}
') {
        str[i] = toupper(str[i]);
        i++;
    }
    printf("大文字の文字列: %s\n", str);
    return 0;
}文字列を入力してください: Hello, C Language!
小文字の文字列: hello, c language!
大文字の文字列: HELLO, C LANGUAGE!このプログラムでは、fgetsを用いてユーザーからの入力を受け取り、入力された文字列をtolowerとtoupperで変換しています。
これにより、ユーザーが入力した任意の文字列を簡単に変換することができます。
応用例
アルファベットの大文字と小文字の変換は、さまざまな場面で応用することができます。
ここでは、ファイル内のテキストの変換、ユーザー入力の正規化、そして大文字小文字を無視した文字列比較について解説します。
ファイル内のテキストの大文字小文字変換
ファイル内のテキストを大文字または小文字に変換することで、データの一貫性を保つことができます。
以下は、ファイルからテキストを読み込み、小文字に変換してから別のファイルに書き込むプログラムの例です。
#include <stdio.h>
#include <ctype.h>
int main() {
    FILE *inputFile, *outputFile;
    char ch;
    inputFile = fopen("input.txt", "r"); // 読み込み用ファイルを開く
    outputFile = fopen("output.txt", "w"); // 書き込み用ファイルを開く
    if (inputFile == NULL || outputFile == NULL) {
        printf("ファイルを開けませんでした。\n");
        return 1;
    }
    while ((ch = fgetc(inputFile)) != EOF) { // ファイルの終わりまで読み込む
        fputc(tolower(ch), outputFile); // 小文字に変換して書き込む
    }
    fclose(inputFile);
    fclose(outputFile);
    printf("変換が完了しました。\n");
    return 0;
}このプログラムは、input.txtからテキストを読み込み、小文字に変換してoutput.txtに書き込みます。
ファイル操作を行う際は、ファイルが正しく開けたかどうかを確認することが重要です。
ユーザー入力の正規化
ユーザーからの入力を正規化することで、データの一貫性を保ち、比較や検索を容易にします。
以下は、ユーザーからの入力を小文字に変換して正規化する例です。
#include <stdio.h>
#include <ctype.h>
int main() {
    char input[100];
    int i = 0;
    printf("文字列を入力してください: ");
    fgets(input, sizeof(input), stdin);
    while (input[i] != '#include <stdio.h>
#include <ctype.h>
int main() {
char input[100];
int i = 0;
printf("文字列を入力してください: ");
fgets(input, sizeof(input), stdin);
while (input[i] != '\0') {
input[i] = tolower(input[i]); // 小文字に変換
i++;
}
printf("正規化された入力: %s\n", input);
return 0;
}
') {
        input[i] = tolower(input[i]); // 小文字に変換
        i++;
    }
    printf("正規化された入力: %s\n", input);
    return 0;
}このプログラムは、ユーザーが入力した文字列を小文字に変換し、正規化された形で出力します。
これにより、入力のばらつきを抑え、データの一貫性を保つことができます。
大文字小文字を無視した文字列比較
文字列を比較する際に大文字小文字を無視することで、より柔軟な検索や比較が可能になります。
以下は、2つの文字列を大文字小文字を無視して比較する例です。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int caseInsensitiveCompare(const char *str1, const char *str2) {
    while (*str1 && *str2) {
        if (tolower(*str1) != tolower(*str2)) {
            return 0; // 異なる
        }
        str1++;
        str2++;
    }
    return *str1 == *str2; // 両方の文字列が終端に達したかを確認
}
int main() {
    char str1[] = "Hello";
    char str2[] = "hello";
    if (caseInsensitiveCompare(str1, str2)) {
        printf("文字列は同じです。\n");
    } else {
        printf("文字列は異なります。\n");
    }
    return 0;
}このプログラムは、2つの文字列を大文字小文字を無視して比較し、同じであれば「文字列は同じです。」と表示します。
tolowerを用いて各文字を小文字に変換しながら比較することで、大文字小文字の違いを無視した比較が可能になります。
まとめ
アルファベットの大文字と小文字の変換は、C言語でのテキスト処理において基本的かつ重要な操作です。
この記事では、ASCIIコードを用いた変換方法、tolowerとtoupper関数の使用方法、文字列全体や一部の変換方法について解説しました。
これらの知識を活用して、テキストデータの一貫性を保ち、柔軟な文字列操作を行ってみてください。
 
![[C言語] atol関数の使い方 – 文字列をlong型数値に変換する](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47138.png)
![[C言語] atof関数の使い方 – 文字列を浮動小数(double)に変換する方法](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47137.png)
![[C言語] sprintf関数の使い方 – 複数の変数を文字列にフォーマット](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47139.png)
![[C言語] sscanf関数の使い方 – フォーマット指定でファイルから読み込む](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47140.png)
![[C言語] strcat 使い方 – 文字列の連結](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47141.png)
![[C言語] strcpy関数の使い方 – 文字列をコピーする](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47144.png)
![[C言語] strcmp関数の使い方 – 文字列を比較する](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47143.png)
![[C言語] strchr関数の使い方 – 最初に見つかった文字の位置を取得](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47142.png)
![[C言語] strncat関数の使い方 – 指定文字分結合](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47148.png)
![[C言語] strlen関数の使い方 – 文字列の長さ(バイト数)の取得](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47147.png)