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

编写一段C语言程序,给你任意一个String表示的数:
char number[] = "11992003747823682482932487928392";
实现如下输出:
0[2]
1[2]
2[7]
3[4]

9[5]
就是X[Y],其中X表示0~9九个数,Y表示每个数在字符串中出现的次数
在线等啊

只要将字符串简单的映射到数组里进行计数就可以了,
#include <stdio.h>
#include <string.h>
//
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;
}追问

能稍微在详细些么,我有些地方还是不理解

追答

就是建立映射,字符'0'映射到数组下标0,'9'映射到下标9,所以对于number[i],只要
num[ number[i] - '0']就可以计数。
你在纸上试着看下程序怎么运行的就知道了

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-09-19
#include <stdio.h>
#include <string.h>
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] );
}本回答被网友采纳
第2个回答  2012-12-08
#include <stdio.h>
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;
}追问

能稍微解释下么?我是新手,很多地方不理解

第3个回答  2015-10-27
如果可能出现的数的范围有限的话,可以用数组来解决

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

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