int型の配列内の要素を数える

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
shiro4ao

int型の配列内の要素を数える

#1

投稿記事 by shiro4ao » 15年前

0~9の値の入ってるint型配列内の数字を数えたいと思います。
例)
13575844
と配列にあれば
1が1個
3が1個
5が2個
7が1個
8が1個
4が2個
ということを知りたいです。

以下のように実装したのですが、1個あるはずなのに
ret=0
と出力されてしまいました。
配列にはちゃんと値が入ってるようで、なおかつGetNum関数にArr
は渡っているようでした。
どこがおかしかったのでしょう。
(これは余談ですが、GetNumという名前はいかがなものでしょうか
 なにかいい名前(?)があれば幸いです。)
=============================================================
#include <stdio.h>
int GetNum(int Arr[/url],int num)
{
int i,ret=0;
for(i=0;i<num;i++){
if(Arr==num) ret++;
}
return ret;
}

int main(void)
{
int i,Arr[5];
for(i=0;i<4;i++){
Arr=i;
}
printf("ret=%d\n",GetNum(Arr,3));
}
=============================================================

シエル

Re:int型の配列内の要素を数える

#2

投稿記事 by シエル » 15年前

3の数字が入ってるのはArr[3]に入っています。

でもGetNum関数のfor文では0番から2番までの要素しかみれてないからだと思います。
なので、
for(i=0;i<=num;i++){
if(Arr==num) ret++;
}
とすれば動くんじゃないかと思います。

名前はGetNumCountとかでいいんじゃないでしょうか。いや、センスないですね。すいません。

Poco

Re:int型の配列内の要素を数える

#3

投稿記事 by Poco » 15年前

main()内でArrの初期化をして、
Arr[0]=0
Arr[1]=1
Arr[2]=2
Arr[3]=3
Arr[4]=不定
となって、GetNum(Arr,3)を呼び出しています。
GetNum(int Arr[/url],int num)の実装を見るに、
配列Arrのインデックスnum-1までしか探索してないので、
GetNum(Arr,3)ではArr[2]までしか探索しません。
Arr[0]からArr[2]までに3は存在しないので、当然戻り値は0になります。

box

Re:int型の配列内の要素を数える

#4

投稿記事 by box » 15年前

GetNum関数の第2引数の意味を日本語で書いてみてください。

yoko

Re:int型の配列内の要素を数える

#5

投稿記事 by yoko » 15年前

int GetNum(int Arr[/url],int num)
{
int i,ret=0;
for(i=0;i<num;i++){
if(Arr==num) ret++;
}
return ret;
}

この関数ですが、for文のところは
i<numではなくi<4ori<=numでないと
numの値にiがなる前にfor文が終了するので
if文は無意味となります。

改善案
#defineを使用して数字を統一すると見やすくなります。
プログラム
#include <stdio.h>
#define N 5
int GetNum(int Arr[/url],int num)
{
int i,ret=0;
for(i=0;i<N;i++){
if(Arr==num) ret++;
}
return ret;
}

int main(void)
{
int i,Arr[N];
for(i=0;i<N;i++){
Arr=i;
}
printf("ret=%d\n",GetNum(Arr,3));
}

あたっしゅ

Re:int型の配列内の要素を数える

#6

投稿記事 by あたっしゅ » 15年前

 関数名は、count (数える)というのはどうだろう。

 コンパイラは通していないが


const int MAX=10;
int res[ MAX ] = { 0,0,0,0,0, 0,0,0,0,0 };

void count( int arr[/url], int num ) {
int i;

for( i=0; i<num; i++ ) {
res[ arr[ i ] ]++;
}
}


とか、やらなきゃ、だめだろ。

shiro4ao

Re:int型の配列内の要素を数える

#7

投稿記事 by shiro4ao » 15年前

シエルさん
ぽこさん
boxさん
yokoさん
あたっしゅさん

ありがとうございます!!

配列サイズを第三引数に渡してあげたら正常に動作しました。
もっと良く考えてから投稿するべきでした・・・・!
すみません。
画像

閉鎖

“C言語何でも質問掲示板” へ戻る