[C言語] 文字列内の数字の出現回数をカウントする方法を解説
C言語で文字列内の数字の出現回数をカウントするには、文字列を一文字ずつ走査し、各文字が数字かどうかを判定します。
この判定には、標準ライブラリのctype.hに含まれるisdigit関数を使用するのが一般的です。
文字列の各文字をisdigitでチェックし、数字であればカウンタ変数をインクリメントします。
この方法により、文字列内に含まれるすべての数字の出現回数を効率的にカウントすることができます。
数字の出現回数をカウントするアルゴリズム
基本的なカウントアルゴリズム
文字列内の数字の出現回数をカウントする基本的なアルゴリズムは、以下の手順で行います。
- 文字列を1文字ずつ走査する。
- 各文字が数字であるかを判定する。
- 数字であれば、カウンタをインクリメントする。
このアルゴリズムは、文字列の長さに比例して処理時間がかかりますが、シンプルで理解しやすい方法です。
ループを用いた文字列走査
文字列を走査するためには、ループを使用します。
C言語では、forループやwhileループを用いることが一般的です。
以下に、forループを用いた例を示します。
#include <stdio.h>
#include <ctype.h> // isdigit関数を使用するために必要
int countDigits(const char *str) {
    int count = 0;
    for (int i = 0; str[i] != '#include <stdio.h>
#include <ctype.h> // isdigit関数を使用するために必要
int countDigits(const char *str) {
int count = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (isdigit((unsigned char)str[i])) {
count++;
}
}
return count;
}
'; i++) {
        if (isdigit((unsigned char)str[i])) {
            count++;
        }
    }
    return count;
}このコードでは、文字列strを1文字ずつ走査し、isdigit関数を用いて数字かどうかを判定しています。
カウンタ変数の利用
カウンタ変数は、特定の条件を満たす要素の数を記録するために使用されます。
上記の例では、countという変数をカウンタとして使用しています。
この変数は、数字が見つかるたびにインクリメントされ、最終的に数字の総数を保持します。
実装例
以下に、文字列内の数字の出現回数をカウントするプログラムの完全な実装例を示します。
#include <stdio.h>
#include <ctype.h> // isdigit関数を使用するために必要
int countDigits(const char *str) {
    int count = 0;
    for (int i = 0; str[i] != '#include <stdio.h>
#include <ctype.h> // isdigit関数を使用するために必要
int countDigits(const char *str) {
int count = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (isdigit((unsigned char)str[i])) {
count++;
}
}
return count;
}
int main() {
const char *text = "C言語で123と456をカウントします。";
int result = countDigits(text);
printf("数字の出現回数: %d\n", result);
return 0;
}
'; i++) {
        if (isdigit((unsigned char)str[i])) {
            count++;
        }
    }
    return count;
}
int main() {
    const char *text = "C言語で123と456をカウントします。";
    int result = countDigits(text);
    printf("数字の出現回数: %d\n", result);
    return 0;
}数字の出現回数: 6このプログラムは、文字列内の数字を正確にカウントし、その結果を出力します。
isdigit関数を使用することで、各文字が数字であるかを簡単に判定できます。
応用例
特定の数字のみをカウントする方法
特定の数字のみをカウントしたい場合は、isdigit関数の代わりに、特定の数字と一致するかを判定する条件を追加します。
以下に、特定の数字(例:’3′)をカウントする方法を示します。
#include <stdio.h>
int countSpecificDigit(const char *str, char target) {
    int count = 0;
    for (int i = 0; str[i] != '#include <stdio.h>
int countSpecificDigit(const char *str, char target) {
int count = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == target) {
count++;
}
}
return count;
}
int main() {
const char *text = "C言語で123と456をカウントします。";
int result = countSpecificDigit(text, '3');
printf("数字'3'の出現回数: %d\n", result);
return 0;
}
'; i++) {
        if (str[i] == target) {
            count++;
        }
    }
    return count;
}
int main() {
    const char *text = "C言語で123と456をカウントします。";
    int result = countSpecificDigit(text, '3');
    printf("数字'3'の出現回数: %d\n", result);
    return 0;
}このプログラムでは、文字列内の特定の数字’3’の出現回数をカウントしています。
数字以外の特定文字のカウント
数字以外の特定の文字をカウントする場合も、同様の方法で実装できます。
以下に、特定の文字(例:’C’)をカウントする方法を示します。
#include <stdio.h>
int countSpecificChar(const char *str, char target) {
    int count = 0;
    for (int i = 0; str[i] != '#include <stdio.h>
int countSpecificChar(const char *str, char target) {
int count = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == target) {
count++;
}
}
return count;
}
int main() {
const char *text = "C言語でCプログラミングを学びます。";
int result = countSpecificChar(text, 'C');
printf("文字'C'の出現回数: %d\n", result);
return 0;
}
'; i++) {
        if (str[i] == target) {
            count++;
        }
    }
    return count;
}
int main() {
    const char *text = "C言語でCプログラミングを学びます。";
    int result = countSpecificChar(text, 'C');
    printf("文字'C'の出現回数: %d\n", result);
    return 0;
}このプログラムは、文字列内の特定の文字’C’の出現回数をカウントします。
文字列内の数字の合計を計算する方法
文字列内の数字の合計を計算するには、各数字を整数に変換して合計します。
以下にその方法を示します。
#include <stdio.h>
#include <ctype.h> // isdigit関数を使用するために必要
int sumOfDigits(const char *str) {
    int sum = 0;
    for (int i = 0; str[i] != '#include <stdio.h>
#include <ctype.h> // isdigit関数を使用するために必要
int sumOfDigits(const char *str) {
int sum = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (isdigit((unsigned char)str[i])) {
sum += str[i] - '0'; // 文字を整数に変換して加算
}
}
return sum;
}
int main() {
const char *text = "C言語で123と456をカウントします。";
int result = sumOfDigits(text);
printf("数字の合計: %d\n", result);
return 0;
}
'; i++) {
        if (isdigit((unsigned char)str[i])) {
            sum += str[i] - '0'; // 文字を整数に変換して加算
        }
    }
    return sum;
}
int main() {
    const char *text = "C言語で123と456をカウントします。";
    int result = sumOfDigits(text);
    printf("数字の合計: %d\n", result);
    return 0;
}数字の合計: 21このプログラムは、文字列内の各数字を整数に変換し、その合計を計算します。
str[i] - '0'を用いることで、文字を対応する整数に変換しています。
まとめ
この記事では、C言語を用いて文字列内の数字の出現回数をカウントする方法とその応用例について解説しました。
基本的なカウントアルゴリズムから、特定の数字や文字のカウント、数字の合計を計算する方法までを学びました。
これらの知識を活用して、より複雑な文字列処理に挑戦してみてください。
 
![[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)