先頭へ戻る

配列に指定の値をもつ要素が何個あるか調べる | Programming Place Plus C言語編 逆引き

Programming Place Plus トップページ -- C言語編 -- 逆引き

先頭へ戻る

この章の概要

この章の概要です。

目的

配列のすべての要素を調べて、目的の値が何個あるかを知りたいとします。要素の型は「==」で一致しているかどうかを調べられるものであれば、何でも構いません。

array_count_values という関数にすることを考えます。引数には、配列(を指すポインタ)と、配列の要素数、探したい値を指定し、戻り値で個数が返されるようにします。

#include <stdio.h>

#define SIZE_OF_ARRAY(array)    (sizeof(array)/sizeof(array[0]))

int main(void)
{
    int array[] = { 7, 2, 6, 2, 2, 9, 1, 3};

    printf( "%zu\n", array_count_values(array, SIZE_OF_ARRAY(array), 2) );

    return 0;
}

array から 2 の個数を探しているので、望む結果は 3 です。そうなるように、array_count関数を実装します。

SIZE_OF_ARRAYマクロは、配列の要素数を取得するものです。詳細は「逆引き 配列の要素数を求める」を参照してください。

方法①(1つずつ調べてカウントする)

要素を1つずつ調べて、一致する回数をカウントすればいいでしょう。

#include <stdio.h>

#define SIZE_OF_ARRAY(array)    (sizeof(array)/sizeof(array[0]))

/*
    配列に含まれている、指定の値に一致する要素の個数を調べる

    引数
        array: 対象の配列
        size:  array の要素数
        value: 探したい値
    戻り値
        value に一致した要素の個数
*/
size_t array_count_values(const int* array, size_t size, int value)
{
    size_t count = 0;
    for (size_t i = 0; i < size; ++i) {
        if (array[i] == value) {
            ++count;
        }
    }
    return count;
}

int main(void)
{
    int array[] = { 7, 2, 6, 2, 2, 9, 1, 3};

    printf( "%zu\n", array_count_values(array, SIZE_OF_ARRAY(array), 2) );

    return 0;
}

実行結果:

3

個数をカウントするための変数 count を用意しておき、要素の値と、目的の値が一致するたびに +1 していきます。count に初期値 0 を与えておくことを忘れないようにしましょう。

この方法は、== で比較できるのならば、要素の型が変わっても通用します。


参考リンク


更新履歴

'2019/9/30 新規作成。



逆引きのトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー