【C言語】大文字小文字を区別しないでアルファベットをカウントする方法

この記事では、C言語で大文字小文字を区別せずにアルファベットをカウントする方法について解説します。

目次から探す

大文字小文字を区別せずにアルファベットをカウントする方法

プログラミングにおいて、文字列中のアルファベットの出現回数をカウントすることはよくあります。

しかし、通常は大文字と小文字を区別してカウントされるため、大文字小文字を区別せずにカウントするには少し工夫を加える必要があります。

方法1: 大文字小文字を統一する

大文字小文字を区別せずにアルファベットをカウントする方法の一つは、まず文字列中のすべての文字を大文字または小文字に統一することです。

これにより、大文字小文字の違いをなくし、アルファベットのカウントを容易にすることができます。

以下に、この方法を実現するためのサンプルコードを示します。

#include <stdio.h>
#include <ctype.h>
void countAlphabet(char* str) {
    int count[26] = {0}; // アルファベットの出現回数を格納する配列
    // 文字列中のすべての文字を大文字に変換
    for (int i = 0; str[i] != '\0'; i++) {
        str[i] = toupper(str[i]);
    }
    // アルファベットの出現回数をカウント
    for (int i = 0; str[i] != '\0'; i++) {
        if (isalpha(str[i])) {
            count[str[i] - 'A']++;
        }
    }
    // 結果の表示
    for (int i = 0; i < 26; i++) {
        printf("%c: %d\n", 'A' + i, count[i]);
    }
}
int main() {
    char str[] = "Hello, World!";
    countAlphabet(str);
    return 0;
}

上記のコードでは、まず文字列中のすべての文字をtoupper()関数を使って大文字に変換しています。

そして、isalpha()関数を使ってアルファベットのみをカウントし、count配列に出現回数を格納しています。

最後に、結果を表示しています。

上記のコードを実行すると、以下のような結果が得られます。

A: 0
B: 0
C: 0
D: 1
E: 1
F: 0
G: 0
H: 1
I: 0
J: 0
K: 0
L: 3
M: 0
N: 0
O: 2
P: 0
Q: 0
R: 1
S: 0
T: 0
U: 0
V: 0
W: 1
X: 0
Y: 0
Z: 0

方法2: 文字列を一文字ずつ比較する

もう一つの方法は、文字列を一文字ずつ比較する方法です。

この方法では、文字列中の各文字を順番に比較し、アルファベットの出現回数をカウントします。

大文字小文字を区別せずにカウントするためには、比較する前に文字を大文字または小文字に統一する必要があります。

以下に、この方法を実現するためのサンプルコードを示します。

#include <stdio.h>
#include <ctype.h>
void countAlphabet(char* str) {
    int count[26] = {0}; // アルファベットの出現回数を格納する配列
    // アルファベットの出現回数をカウント
    for (int i = 0; str[i] != '\0'; i++) {
        char c = toupper(str[i]); // 文字を大文字に変換
        if (isalpha(c)) {
            count[c - 'A']++;
        }
    }
    // 結果の表示
    for (int i = 0; i < 26; i++) {
        printf("%c: %d\n", 'A' + i, count[i]);
    }
}
int main() {
    char str[] = "Hello, World!";
    countAlphabet(str);
    return 0;
}

上記のコードでは、文字列中の各文字をtoupper()関数を使って大文字に変換し、isalpha()関数を使ってアルファベットのみをカウントしています。

結果の表示は先ほどと同様です。

目次から探す