[C言語] アルファベットが大文字か小文字か判定する方法を解説
C言語でアルファベットが大文字か小文字かを判定するには、標準ライブラリのctype.hを利用します。
このライブラリにはisupper()とislower()という関数があり、それぞれ文字が大文字か小文字かを判定します。
例えば、isupper('A')は真を返し、islower('a')も真を返します。
これらの関数を使うことで、簡単に文字の大文字・小文字を判定することができます。
大文字か小文字かを判定する方法
C言語では、文字が大文字か小文字かを判定するための便利な関数が用意されています。
ここでは、標準ライブラリの関数と自作関数を使った判定方法について解説します。
isupper関数の使い方
isupper関数は、指定した文字が大文字であるかどうかを判定するための関数です。
この関数は、<ctype.h>ヘッダファイルに含まれています。
#include <stdio.h>
#include <ctype.h>
int main() {
    char ch = 'A'; // 判定する文字
    if (isupper(ch)) {
        printf("%c は大文字です。\n", ch);
    } else {
        printf("%c は大文字ではありません。\n", ch);
    }
    return 0;
}A は大文字です。この例では、文字'A'が大文字であるため、isupper関数は真を返し、「A は大文字です。」と出力されます。
islower関数の使い方
islower関数は、指定した文字が小文字であるかどうかを判定するための関数です。
この関数も、<ctype.h>ヘッダファイルに含まれています。
#include <stdio.h>
#include <ctype.h>
int main() {
    char ch = 'a'; // 判定する文字
    if (islower(ch)) {
        printf("%c は小文字です。\n", ch);
    } else {
        printf("%c は小文字ではありません。\n", ch);
    }
    return 0;
}a は小文字です。この例では、文字'a'が小文字であるため、islower関数は真を返し、「a は小文字です。」と出力されます。
自作関数での判定方法
標準ライブラリの関数を使わずに、自作関数で大文字と小文字を判定する方法もあります。
以下にその方法を示します。
大文字判定の自作関数
大文字を判定する自作関数は、文字のASCIIコードを利用して判定します。
#include <stdio.h>
int isUpperCase(char ch) {
    return (ch >= 'A' && ch <= 'Z');
}
int main() {
    char ch = 'B'; // 判定する文字
    if (isUpperCase(ch)) {
        printf("%c は大文字です。\n", ch);
    } else {
        printf("%c は大文字ではありません。\n", ch);
    }
    return 0;
}B は大文字です。この自作関数isUpperCaseは、文字が'A'から'Z'の範囲にあるかどうかをチェックします。
小文字判定の自作関数
小文字を判定する自作関数も、同様にASCIIコードを利用して判定します。
#include <stdio.h>
int isLowerCase(char ch) {
    return (ch >= 'a' && ch <= 'z');
}
int main() {
    char ch = 'b'; // 判定する文字
    if (isLowerCase(ch)) {
        printf("%c は小文字です。\n", ch);
    } else {
        printf("%c は小文字ではありません。\n", ch);
    }
    return 0;
}b は小文字です。この自作関数isLowerCaseは、文字が'a'から'z'の範囲にあるかどうかをチェックします。
応用例
C言語で文字の大文字・小文字を判定する方法を理解したところで、これを応用したいくつかの例を紹介します。
これらの例は、文字列操作において非常に役立ちます。
文字列内の大文字と小文字を数える
文字列内の大文字と小文字の数を数えるプログラムを作成します。
isupperとislower関数を利用して、各文字を判定します。
#include <stdio.h>
#include <ctype.h>
int main() {
    char str[] = "Hello, World!"; // 判定する文字列
    int upperCount = 0;
    int lowerCount = 0;
    for (int i = 0; str[i] != '#include <stdio.h>
#include <ctype.h>
int main() {
char str[] = "Hello, World!"; // 判定する文字列
int upperCount = 0;
int lowerCount = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (isupper(str[i])) {
upperCount++;
} else if (islower(str[i])) {
lowerCount++;
}
}
printf("大文字の数: %d\n", upperCount);
printf("小文字の数: %d\n", lowerCount);
return 0;
}
'; i++) {
        if (isupper(str[i])) {
            upperCount++;
        } else if (islower(str[i])) {
            lowerCount++;
        }
    }
    printf("大文字の数: %d\n", upperCount);
    printf("小文字の数: %d\n", lowerCount);
    return 0;
}大文字の数: 2
小文字の数: 8このプログラムは、文字列"Hello, World!"内の大文字と小文字の数をそれぞれ数え、結果を出力します。
文字列をすべて大文字に変換する
文字列内のすべての小文字を大文字に変換するプログラムを作成します。
toupper関数を使用します。
#include <stdio.h>
#include <ctype.h>
int main() {
    char str[] = "Hello, World!"; // 変換する文字列
    for (int i = 0; str[i] != '#include <stdio.h>
#include <ctype.h>
int main() {
char str[] = "Hello, World!"; // 変換する文字列
for (int i = 0; str[i] != '\0'; i++) {
str[i] = toupper(str[i]);
}
printf("大文字に変換された文字列: %s\n", str);
return 0;
}
'; i++) {
        str[i] = toupper(str[i]);
    }
    printf("大文字に変換された文字列: %s\n", str);
    return 0;
}大文字に変換された文字列: HELLO, WORLD!このプログラムは、文字列"Hello, World!"をすべて大文字に変換し、結果を出力します。
文字列をすべて小文字に変換する
文字列内のすべての大文字を小文字に変換するプログラムを作成します。
tolower関数を使用します。
#include <stdio.h>
#include <ctype.h>
int main() {
    char str[] = "Hello, World!"; // 変換する文字列
    for (int i = 0; str[i] != '#include <stdio.h>
#include <ctype.h>
int main() {
char str[] = "Hello, World!"; // 変換する文字列
for (int i = 0; str[i] != '\0'; i++) {
str[i] = tolower(str[i]);
}
printf("小文字に変換された文字列: %s\n", str);
return 0;
}
'; i++) {
        str[i] = tolower(str[i]);
    }
    printf("小文字に変換された文字列: %s\n", str);
    return 0;
}小文字に変換された文字列: hello, world!このプログラムは、文字列"Hello, World!"をすべて小文字に変換し、結果を出力します。
まとめ
この記事では、C言語で文字が大文字か小文字かを判定する方法について解説しました。
標準関数であるisupperとislowerの使い方、自作関数による判定方法、そしてそれらを応用した文字列操作の例を紹介しました。
これらの知識を活用して、文字列操作のスキルをさらに向上させてください。
 
![[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)
![[C言語] stricmp関数の使い方 – 大文字小文字を区別しない比較](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47146.png)
![[C言語] strcspn関数の使い方 – 文字群が含まれる位置を検索](https://af-e.net/wp-content/uploads/2024/10/thumbnail-47145.png)