[C言語] 文字列内の数字の出現回数をカウントする方法を解説


C言語で文字列内の数字の出現回数をカウントするには、文字列を一文字ずつ走査し、各文字が数字かどうかを判定します。

この判定には、標準ライブラリのctype.hに含まれるisdigit関数を使用するのが一般的です。

文字列の各文字をisdigitでチェックし、数字であればカウンタ変数をインクリメントします。

この方法により、文字列内に含まれるすべての数字の出現回数を効率的にカウントすることができます。

この記事でわかること
  • 文字列内の数字をカウントする基本的なアルゴリズム
  • ループを用いた文字列走査の方法
  • 特定の数字や文字をカウントする応用例
  • 文字列内の数字の合計を計算する方法

目次から探す

数字の出現回数をカウントするアルゴリズム

基本的なカウントアルゴリズム

文字列内の数字の出現回数をカウントする基本的なアルゴリズムは、以下の手順で行います。

  1. 文字列を1文字ずつ走査する。
  2. 各文字が数字であるかを判定する。
  3. 数字であれば、カウンタをインクリメントする。

このアルゴリズムは、文字列の長さに比例して処理時間がかかりますが、シンプルで理解しやすい方法です。

ループを用いた文字列走査

文字列を走査するためには、ループを使用します。

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] != '\0'; 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] != '\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] != '\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] != '\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] != '\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'を用いることで、文字を対応する整数に変換しています。

よくある質問

文字列に数字が含まれていない場合はどうなる?

文字列に数字が含まれていない場合、カウントアルゴリズムは単にカウンタ変数をインクリメントしないため、結果としてカウントは0になります。

例えば、countDigits関数を使用した場合、数字がない文字列を渡すと、0が返されます。

isdigit関数を使わない方法はある?

isdigit関数を使わずに数字を判定する方法もあります。

例えば、各文字が’0’から’9’の範囲にあるかをチェックすることで、数字かどうかを判定できます。

例:if (str[i] >= '0' && str[i] <= '9')

大文字と小文字の区別は必要?

数字のカウントにおいて、大文字と小文字の区別は必要ありません。

数字は文字コード上で大文字小文字の区別がないため、isdigit関数や文字コードの範囲チェックを用いることで、数字を正確に判定できます。

まとめ

この記事では、C言語を用いて文字列内の数字の出現回数をカウントする方法とその応用例について解説しました。

基本的なカウントアルゴリズムから、特定の数字や文字のカウント、数字の合計を計算する方法までを学びました。

これらの知識を活用して、より複雑な文字列処理に挑戦してみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • URLをコピーしました!
目次から探す