C语言中求数组中元素出现的次数

2024-11-19 19:23:35
推荐回答(4个)
回答1:

只要将字符串简单的映射到数组里进行计数就可以了,
#include
#include
//
int main()
{
char number[]= "11992003747823682482932487928392"; //要计数的字符串
int i, num[10];
memset(num, 0, sizeof(int)*10); //将num初始化为0
for(i=0; number[i]; ++i) //映射,散列表
++num[number[i]-'0'];
for(i=0; i<10; ++i) //
printf("%d[%d]\n", i, num[i]);
return 0;
}

回答2:

#include
#include
void main()
{
int count[10]={0}; //记录各个字符的个数
char number[] = "11992003747823682482932487928392";
int i=0;
while( number[i]!='\0' ) //判断是否遇到字符串结束符'\0'
{
switch (number[i++]) { //i++用于指向下一个字符
case '0': count[0]++; break; //字符0 的个数加1
case '1': count[1]++; break; //字符1 的个数加1
case '2': count[2]++; break;
case '3': count[3]++; break;
case '4': count[4]++; break;
case '5': count[5]++; break;
case '6': count[6]++; break;
case '7': count[7]++; break;
case '8': count[8]++; break;
case '9': count[9]++; break; //字符9 的个数加1
default: beak;
}
}
for ( i=0;i<10;i++ )
printf("%d[%d]\n" , i , count[i] );
}

回答3:

#include
int main()
{
int num[10]={0};
char number[] = "11992003747823682482932487928392";
int i=0;
for ( i=0;number[i];i++ )
num[ number[i]-'0' ] ++ ;
for ( i=0;i<10;i++ )
printf("%d[%d]\n" , i , num[i] );
return 0;
}

回答4:

如果可能出现的数的范围有限的话,可以用数组来解决

int counter[100];//只能解决0~99范围内的整数
for(int i=0;i counter[a[i]]++;
}
for(int i=0;i<100;i++){
if(counter[i])printf("%d出现%d次\n",i,counter[i]);
}

更复杂的情况(例如出现小数或特别大的数)就得用链表一类的容器来解决了