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

譬如有一个数组{1,2,2,2,2,2,2,1}有没有一个函数是可以知道其中1出现了2次2出现了6次假设已经知道出现哪几个值,只需要统计个数而已有没有比下面这个快一点的?... 譬如有一个数组{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++;
数组比较小的话就遍历?我担心不够快。。。是不是我的担心是多余的呢?
展开
 我来答
ggdmdf
2008-08-26 · TA获得超过1520个赞
知道小有建树答主
回答量:1024
采纳率:0%
帮助的人:1238万
展开全部
如果给定数组的元素值偏小,不如考虑用全数组,描述如下:

// 元素最大值不会超过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等),那么就得另外想办法了。
woshijakey
2008-08-26 · TA获得超过205个赞
知道答主
回答量:116
采纳率:0%
帮助的人:106万
展开全部
个人觉得还是需要遍历吧,除非你先把该数组排序,那样的话统计起来就不需要遍历整个数组了,对于一个无规则的数组,我想不遍历是不可能统计出来的吧。其实像这类问题,单个的计算而已的话,就没什么好担心了,主要是函数调用的话才会比较耽误时间,是程序炮得慢,对于这样的情况,一般可以先对其归类分组,再去统计,也就是说先对它处理好,把结果存储起来,调用的时候直接调用存储的数据而不用每次都重新去统计。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鱼沉乜旻
游戏玩家

2020-05-16 · 非著名电竞玩家
知道大有可为答主
回答量:1.1万
采纳率:29%
帮助的人:895万
展开全部
#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;
}//按你的标题给你个例子,其它自己搞定!~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式