C语言中计算一个数组中某个值出现次数的函数?

譬如有一个数组{1,2,2,2,2,2,2,1}
有没有一个函数是可以知道
其中1出现了2次
2出现了6次

假设已经知道出现哪几个值,只需要统计个数而已

有没有比下面这个快一点的?
for (i=0;i<length;i++)
if (a[i]==1)
cnt1++;
else if (a[i]==2)
cnt2++;
数组比较小的话就遍历?我担心不够快。。。是不是我的担心是多余的呢?

如果给定数组的元素值偏小,不如考虑用全数组,描述如下:

// 元素最大值不会超过MAX-1
#define MAX 101

// 保存元素出现次数,初始化为0。
ulong count_arr[MAX] = {0};

void func(int arr[], uint len) {
int i;
for i->len
++count_arr[i];
}

// ...
// print
int i;
for i->MAX
if (count_arr[i] > 0)
printf("%d: %u\n", i, count_arr[i]);

如果元素的最大值比较大(比如说100000,100000000等),那么就得另外想办法了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-08-26
个人觉得还是需要遍历吧,除非你先把该数组排序,那样的话统计起来就不需要遍历整个数组了,对于一个无规则的数组,我想不遍历是不可能统计出来的吧。其实像这类问题,单个的计算而已的话,就没什么好担心了,主要是函数调用的话才会比较耽误时间,是程序炮得慢,对于这样的情况,一般可以先对其归类分组,再去统计,也就是说先对它处理好,把结果存储起来,调用的时候直接调用存储的数据而不用每次都重新去统计。本回答被提问者采纳
第2个回答  2020-05-16
#include
<stdio.h>
int
main()
{
char
ch[]="hello
world!";
for
(int
i=0;ch[i]!='\0';i++)
{
if
('o'==ch[i])
{
printf("n:%d\n",i+1);//搜索字符'o'都在第几个出现
}
}
return
0;
}//按你的标题给你个例子,其它自己搞定!~

在c 语言中count是什么意思?
在c语言中,count是用来计算某个特定情况的数量的函数。它通常用于对数组中的元素进行计数,或用来统计一段字符串中的字母或单词的数量。基本使用形式为:count(array, length, value),其中array表示待计数的数组,length表示数组的长度,value表示需要计数的数值或字符。这个函数会返回数组中有多少个元素与...

...统计一个整数在数组中出现的次数,调用函数计算结果 c语言 谢谢...
int fun(int a[],int n,int m) \/*形参n表示数组中元素个数,m表示要统计的那个整数*\/{int i,k=0; for(i=0; i<n; i++) {if(a[i]==m) k++; }return k;}void main(){int ar[10],i,m,k; scanf("%d",&m); printf("\\nPlease input array:"); for(i=0; i<10; i++) scanf(...

...再从输入一个数 查找出该数字在数列中出现的次数
printf("%d出现%d次\\n", b, cnt);}

(C语言)关于统计一行数字字符中每个数字字符出现的次数。
void stat(char *s,int *num) { int i; char ch; ch=s[i]; \/\/你上面只是定义了i,从未赋值,i的值就是一个随机数 while((ch=getchar())!='\\n') { \/\/你前面的indata就已经读入数据到s中了,这里只应该从s中读取并比较它是不是\\0就可以了,而不应该是getchar if...

请问c语言当中,如何统计数字各自出现的次数
int num = 0, i = 0;printf("请输入一个整数:");scanf("%d", &num);int array[10] = {};while(num) { array[num % 10]++; \/\/让数组下标代表所判断的数字 num \/= 10;} for (i = 0; i < 10; i++) { if (array[i] != 0)printf ("%d有%d个\\n", i, array[i]...

C语言 怎么计算数组中每一个不同元素出现的次数
如果可能出现的数的范围有限的话,可以用数组来解决 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]);}更复杂的情况(例如出现...

给定一个正整数数组,求出现次数最多的数字。 用C语言编程实现
include "stdio.h"int main(){int a[] = { 1, 5, 6, 6, 5, 33, 4, 5, 10, 5, 4, 5, 6, 7, 8, 9, 5, 8, 100, 5, 555, 5, 123 };int i,j;int y=0,c=0,l=0;for (i = 0; i <sizeof(a)\/sizeof(int); i++){for (j = 0; j <sizeof(a) \/ ...

如何用C语言统计一个文档中每个字母的个数和出现的频率
用文件操作函数打开文件,挨着读入字符,统计每个字符出现了多少次,最后用每个字符出现的次数除以所有次数,得到出现频率。例程:\/*统计一个文件里各个字符出现的次数,这里只统计了26个字母,如果还有更多的字符的话,将数组再扩大就行了*\/#include<stdio.h>#include<math.h>void stat(char *file,int *...

c语言编程输入一组整数求其中出现次数最多的整数及其出现次数
} \/\/出现过次数加一 else ++dic[a]; } \/\/初始化max的值 int max_time = 0,max_number; \/\/遍历这个map for(map<int,int>::iterator iter = dic.begin();iter != dic.end();++ iter) { \/\/发现次数更多的 if(iter->second > max_time) { max...

C语言 用递归思想找出一个数组中出现次数最多的数
对于n个元素的数组,求得n-1个元素中出现最多的数值和频度,如果第n个元素与n-1个中的最多的值相同,那么这个就是要求的值,并次数加1. 否则计算第n个数出现的次数,并与n-1中最多的数出现次数对比。代码:include <stdio.h>void find(int *a, int l, int *max, int *value){ if(...

相似回答