ページ 11

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

Posted: 2010年9月27日(月) 22:48
by shiro4ao
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型の配列内の要素を数える

Posted: 2010年9月27日(月) 22:59
by シエル
3の数字が入ってるのはArr[3]に入っています。

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

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

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

Posted: 2010年9月27日(月) 23:01
by Poco
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になります。

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

Posted: 2010年9月27日(月) 23:01
by box
GetNum関数の第2引数の意味を日本語で書いてみてください。

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

Posted: 2010年9月27日(月) 23:05
by yoko
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型の配列内の要素を数える

Posted: 2010年9月27日(月) 23:07
by あたっしゅ
 関数名は、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 ] ]++;
}
}


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

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

Posted: 2010年9月27日(月) 23:07
by shiro4ao
シエルさん
ぽこさん
boxさん
yokoさん
あたっしゅさん

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

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