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));
}
=============================================================
int型の配列内の要素を数える
Re:int型の配列内の要素を数える
3の数字が入ってるのはArr[3]に入っています。
でもGetNum関数のfor文では0番から2番までの要素しかみれてないからだと思います。
なので、
for(i=0;i<=num;i++){
if(Arr==num) ret++;
}
とすれば動くんじゃないかと思います。
名前はGetNumCountとかでいいんじゃないでしょうか。いや、センスないですね。すいません。
でもGetNum関数のfor文では0番から2番までの要素しかみれてないからだと思います。
なので、
for(i=0;i<=num;i++){
if(Arr==num) ret++;
}
とすれば動くんじゃないかと思います。
名前はGetNumCountとかでいいんじゃないでしょうか。いや、センスないですね。すいません。
Re:int型の配列内の要素を数える
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になります。
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型の配列内の要素を数える
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));
}
{
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型の配列内の要素を数える
関数名は、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 ] ]++;
}
}
とか、やらなきゃ、だめだろ。
コンパイラは通していないが
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型の配列内の要素を数える
シエルさん
ぽこさん
boxさん
yokoさん
あたっしゅさん
ありがとうございます!!
配列サイズを第三引数に渡してあげたら正常に動作しました。
もっと良く考えてから投稿するべきでした・・・・!
すみません。

ぽこさん
boxさん
yokoさん
あたっしゅさん
ありがとうございます!!
配列サイズを第三引数に渡してあげたら正常に動作しました。
もっと良く考えてから投稿するべきでした・・・・!
すみません。
